/***  mmd.c: Morrow Micro-Decision
 
    Created by Patrick Linstruth (patrick@deltecent.com)
 
    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    PETER SCHORN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    Except as contained in this notice, the name of Patrick Linstruth shall not
    be used in advertising or otherwise to promote the sale, use or other dealings
    in this Software without prior written authorization from Patrick Linstruth.

    These functions support the Morrow Micro-Decision Models 2 and 3.

    There are two devices defined, MMD and MMDM. The MMD device supports 4
    floppy drives and the console serial port.

    The Micro-Decision's second serial (modem) port uses I/O ports 0xfe and 0xff.
    Z80 or 8080 programs can also communicate with the SIMH pseudo device via
    port 0xfe. Due to this conflict, the MMDM device is disabled by default. In
    order to use the modem port, execute "SET MMDM ENABLE". Note that when the
    MMDM device is enabled it will not be possible to use the SIMH pseudo device
    and CP/M utilities such as R.COM and W.COM.

    Units:

    MMD0 - Drive A
    MMD1 - Drive B
    MMD2 - Drive C
    MMD3 - Drive D
    MMD4 - Console Port
    MMDM - Modem Port

    ** NOTES **

    PORT              FUNCTION
    ----              --------
     F5               MOTOR CHECK / DIAG / CENTRONICS STATUS
                      Bit 0,1 Motor Mask (read)
                      Bit 2   *Index (read)
                      Bit 3   Printer Ack (read)
                      Bit 4   Printer Busy (read)
                      Bit 5   *Diag (read)
                      Bit 6   Unknown
                      Bit 7   *Printer Strobe (write)

    DISK FORMAT
    -----------
    40 Cylinders
    5 Sectors/Track
    1024 Bytes per Track
   
    Tracks 0-1 Bootable Image (10K)

    Double sided disks have 80 tracks, with even numbered tracks on side 0
    and odd numbered tracks on side 1.

    Track = (2 * Cylinder) + Side

    MTAB contains one 9 byte entry for each logical drive.
    The bytes of each entry are defined as follows:

    Byte 0          DSKDEF0:
                    Bit 0-2 Motor control bit
                    Bit 3-4 Double sided mode:
                                    00=Even tracks on side 0,
                                       Odd tracks on side 1.
                                    01=1st 40 (or 80) tracks
                                       on side 0, remaining
                                       tracks on side 1.
                                    10=Both sides are treated
                                       as a single track with
                                       twice as many sectors.
                    Bit 5 Double sided drive if = 1.
                    Bit 6 Unused.
                    Bit 7 Foreign drive format if = 1.

    Byte 1          DSKDEF1:
                    Bit 0-1 Physical drive address.
                    Bit 2   Double sided media if = 1.
                    Bit 3-4 Sector size:
                                    00=128
                                    01=256
                                    10=512
                                    11=1024.
                    Bit 5   Tracks: 0=40; 1=80.
                    Bit 6   Density: 0=single; 1=double.
                    Bit 7   Virtual drive: 1=virtual.

    Byte 2          Motor on wait time in increments of 4 ms.

    Byte 3          Head settle time (after seek) in increments
                    of 4 ms.

    Byte 4-5        The two parameter bytes for the FDC specify
                    command: Byte 4 = SRT/HUT
                             Byte 5 = HLT/ND
                             ND must be 1.

    Byte 6          EOT byte for FDC read or write commands.

    Byte 7          GPL byte for FDC read or write commands.

    Byte 8          Current track.

*/

/* #define DBG_MSG */

#include "altairz80_defs.h"
#include "sim_imd.h"
#include "sim_tmxr.h"

/********/
/* SIMH */
/********/

#ifdef DBG_MSG
#define DBG_PRINT(args) sim_printf args
#else
#define DBG_PRINT(args)
#endif

extern uint32 vectorInterrupt;            /* Interrupt Request */
extern uint8 dataBus[MAX_INT_VECTORS];    /* Data Bus Value    */
extern uint32 PCX;

extern uint32 sim_map_resource(uint32 baseaddr, uint32 size, uint32 resource_type,
                               int32 (*routine)(const int32, const int32, const int32), const char* name, uint8 unmap);

/* Debug flags */
#define VERBOSE_MSG         (1 << 0)
#define ERROR_MSG           (1 << 1)
#define RBUF_MSG            (1 << 2)
#define WBUF_MSG            (1 << 3)
#define FDC_MSG             (1 << 4)
#define STATUS_MSG          (1 << 5)

/* Debug Flags */
static DEBTAB mmd_dt[] = {
    { "VERBOSE",    VERBOSE_MSG,        "Verbose messages"      },
    { "ERROR",      ERROR_MSG,          "Error messages"        },
    { "FDC",        FDC_MSG,            "FDC Command messages"  },
    { "RBUF",       RBUF_MSG,           "Read Buffer messages"  },
    { "WBUF",       WBUF_MSG,           "Write Buffer messages" },
    { "STATUS",     STATUS_MSG,         "Status messages"       },
    { NULL,         0                                           }
};

/*****************************/
/* Local function prototypes */
/*****************************/

static t_stat mmd_reset(DEVICE *dptr);
static t_stat mmdm_reset(DEVICE *dptr);
static t_stat mmd_svc(UNIT *uptr);
static t_stat mmdm_svc(UNIT *uptr);
static t_stat mmd_sio1_svc(UNIT *uptr);
static t_stat mmd_attach(UNIT *uptr, CONST char *cptr);
static t_stat mmdm_attach(UNIT *uptr, CONST char *cptr);
static t_stat mmd_detach(UNIT *uptr);
static t_stat mmdm_detach(UNIT *uptr);
static t_stat mmd_config_line(DEVICE *dev, TMLN *tmln, int baud);
static t_stat mmd_boot(int32 unitno, DEVICE *dptr);
static const char* mmd_description(DEVICE *dptr);
static t_stat mmd_set_diag(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
static t_stat mmd_show_diag(FILE *st, UNIT *uptr, int32 val, CONST void *desc);
static t_stat mmd_set_rom(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
static t_stat mmd_show_rom(FILE *st, UNIT *uptr, int32 val, CONST void *desc);
static int32 mmddev(int32 Addr, int32 rw, int32 data);
static int32 mmdrom(int32 Addr, int32 rw, int32 data);
static int32 mmdmem(int32 Addr, int32 rw, int32 data);
static void intZ80(void);
static uint8 MMD_Dev_Read(uint32 Addr);
static uint8 MMD_FDC_Read_Data(void);
static uint8 MMD_Dev_Write(uint32 Addr, int32 data);
static void MMD_FDC_Write_Data(int32 Data);
static void MMD_Command_New(int32 Data);
static void MMD_Command_Stack(int32 Data);
static void MMD_Command_Proc(void);
static uint8 MMD_Result_Stack(void);
static uint8 MMD_Exec_Format(void);
static uint8 MMD_Exec_Read(void);
static uint8 MMD_Exec_Write(int32 Data);
static uint8 MMD_Term_Count(void);
static uint8 MMD_Seek_Sector(uint8 drive);
static uint8 MMD_Read_Sector(uint8 drive);
static uint8 MMD_Write_Sector(uint8 drive);
static void MMD_Dump_Sector(void);
static const char * MMD_Command_String(int32 command);

/***********/
/* ROM/RAM */
/***********/

#define MMD_ROM_BASE   0x0000
#define MMD_ROM_SIZE   4096
#define MMD_ROM_MASK   (MMD_ROM_SIZE-1)

static uint8 mmd_mem[MMD_ROM_SIZE];    /* 4K Banked Memory */

/* MD2 1.3 ROM is 2048 bytes */
static uint8 mmd_rom_13[MMD_ROM_SIZE] = {
    0xc3, 0x1d, 0x00, 0xc3, 0xba, 0x01, 0xc3, 0x10,
    0x04, 0xc3, 0xd3, 0x01, 0xc3, 0xe0, 0x01, 0xc3,
    0x64, 0x02, 0xc3, 0x93, 0x03, 0xc3, 0xdd, 0x03,
    0xc3, 0x96, 0x01, 0xd4, 0x05, 0xed, 0x46, 0x31,
    0x00, 0x00, 0xfd, 0x21, 0xf3, 0x05, 0xcd, 0x5b,
    0x00, 0x11, 0x0f, 0x07, 0xcd, 0xb1, 0x01, 0xcd,
    0x81, 0x00, 0xcd, 0xac, 0x00, 0xcd, 0x90, 0x00,
    0xcd, 0x00, 0xfc, 0x11, 0x8a, 0x07, 0xcd, 0xba,
    0x01, 0xcd, 0x78, 0x03, 0xfe, 0x0d, 0x20, 0xf9,
    0x11, 0x78, 0x00, 0xcd, 0xba, 0x01, 0xc3, 0x76,
    0x01, 0xcd, 0xba, 0x01, 0x11, 0xf3, 0x06, 0xcd,
    0xba, 0x01, 0x76, 0x3e, 0x80, 0xd3, 0xfd, 0xd3,
    0xff, 0xd3, 0xfd, 0xd3, 0xff, 0x3e, 0x40, 0xd3,
    0xfd, 0xd3, 0xff, 0x3e, 0xce, 0xd3, 0xfd, 0xd3,
    0xff, 0x3e, 0x37, 0xd3, 0xfd, 0xd3, 0xff, 0xc9,
    0x0d, 0x0a, 0x00, 0x3a, 0xa0, 0x00, 0xc5, 0xf6,
    0x04, 0x21, 0x00, 0x00, 0x01, 0xfd, 0x07, 0xcd,
    0x9f, 0x00, 0x11, 0xd9, 0x07, 0x20, 0xc2, 0xc9,
    0x21, 0x00, 0xfc, 0x01, 0xf8, 0x03, 0xcd, 0x9f,
    0x00, 0x11, 0xc6, 0x07, 0x20, 0xb3, 0xc9, 0xaf,
    0xf5, 0xf1, 0xae, 0x23, 0x0b, 0xf5, 0x78, 0xb1,
    0x20, 0xf7, 0xf1, 0xc9, 0x21, 0xc4, 0x00, 0x11,
    0x00, 0xfc, 0x01, 0xb2, 0x00, 0xed, 0xb0, 0x01,
    0x45, 0x03, 0xd5, 0xe1, 0x13, 0x36, 0xff, 0xed,
    0xb0, 0x36, 0x1f, 0xc9, 0xdb, 0xf6, 0x3a, 0x00,
    0x00, 0xfe, 0xc3, 0xd3, 0xf6, 0x20, 0x03, 0xc3,
    0x3b, 0x00, 0x11, 0x57, 0x07, 0xcd, 0xba, 0x01,
    0xdb, 0xf6, 0x21, 0x00, 0x00, 0x01, 0xff, 0xfb,
    0xcd, 0x31, 0xfc, 0xb7, 0xd3, 0xf6, 0x11, 0xc6,
    0x07, 0xc2, 0x51, 0x00, 0x11, 0x7b, 0x07, 0xcd,
    0xba, 0x01, 0xc3, 0x3b, 0x00, 0x22, 0xb2, 0xfc,
    0x21, 0x84, 0xfc, 0x56, 0x23, 0xcb, 0x7e, 0x20,
    0x18, 0x5e, 0xcb, 0x73, 0xcb, 0xb3, 0x23, 0xe5,
    0x28, 0x05, 0xcd, 0x57, 0xfc, 0x18, 0x07, 0xdd,
    0x21, 0x77, 0xfc, 0xcd, 0x5b, 0xfc, 0xe1, 0x18,
    0xe2, 0xaf, 0xc9, 0xdd, 0x21, 0x79, 0xfc, 0x2a,
    0xb2, 0xfc, 0x7b, 0x85, 0x6f, 0x7c, 0xce, 0x00,
    0x67, 0xcd, 0x75, 0xfc, 0x23, 0x23, 0x23, 0x78,
    0xbc, 0xd8, 0x20, 0xf5, 0x79, 0xbd, 0xd8, 0x18,
    0xf0, 0xdd, 0xe9, 0x72, 0xc9, 0x7e, 0xba, 0x20,
    0x01, 0xc9, 0xf1, 0xf1, 0xf1, 0x3e, 0xff, 0xc9,
    0xff, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x41,
    0xff, 0x42, 0xff, 0x40, 0x00, 0x00, 0xff, 0x01,
    0x00, 0x02, 0x00, 0x42, 0x00, 0x40, 0xff, 0x41,
    0xaa, 0x00, 0x55, 0x02, 0xaa, 0x01, 0xaa, 0x41,
    0x55, 0x01, 0xaa, 0x40, 0x55, 0x00, 0x55, 0x42,
    0x55, 0x41, 0x55, 0x40, 0x00, 0x80, 0x21, 0xd4,
    0x05, 0x11, 0x00, 0xff, 0x01, 0x42, 0x00, 0xed,
    0xb0, 0xdd, 0x21, 0x00, 0xff, 0xfd, 0x21, 0x1f,
    0xff, 0xcd, 0x33, 0x04, 0xcd, 0x64, 0x02, 0xdd,
    0x7e, 0x07, 0xb7, 0xca, 0x00, 0xfe, 0x11, 0xd3,
    0x06, 0xc3, 0x51, 0x00, 0xdb, 0xfd, 0xcb, 0x47,
    0x28, 0xfa, 0x79, 0xd3, 0xfc, 0xc9, 0xdb, 0xfd,
    0xcb, 0x4f, 0x28, 0xfa, 0xdb, 0xfc, 0xe6, 0x7f,
    0xc9, 0x06, 0x32, 0x3e, 0x0a, 0xcd, 0xc3, 0x01,
    0x10, 0xf9, 0x1a, 0xb7, 0xc8, 0xcd, 0xc3, 0x01,
    0x13, 0x18, 0xf7, 0x4f, 0xd5, 0xe5, 0xfd, 0x6e,
    0x16, 0xfd, 0x66, 0x17, 0xcd, 0xd2, 0x01, 0xe1,
    0xd1, 0xc9, 0xe9, 0x21, 0x93, 0x03, 0xdd, 0x75,
    0x0a, 0xdd, 0x74, 0x0b, 0x0e, 0x06, 0x18, 0x0b,
    0x21, 0xdd, 0x03, 0xdd, 0x75, 0x0a, 0xdd, 0x74,
    0x0b, 0x0e, 0x05, 0xdd, 0x7e, 0x00, 0xcd, 0xb8,
    0x04, 0x23, 0x7e, 0xe6, 0x40, 0xb1, 0xdd, 0x77,
    0x16, 0xdd, 0x36, 0x15, 0x09, 0x3e, 0x18, 0xa6,
    0x0f, 0x0f, 0x0f, 0xdd, 0x77, 0x1b, 0x06, 0x80,
    0x11, 0x80, 0x00, 0xfe, 0x00, 0x28, 0x11, 0x06,
    0xff, 0x11, 0x00, 0x00, 0xfe, 0x01, 0x28, 0x08,
    0x16, 0x01, 0xfe, 0x02, 0x28, 0x02, 0x16, 0x03,
    0xdd, 0x70, 0x1e, 0xdd, 0xcb, 0x0d, 0x7e, 0x20,
    0x06, 0xdd, 0x73, 0x0c, 0xdd, 0x72, 0x0d, 0xaf,
    0xcb, 0x56, 0xdd, 0x46, 0x01, 0xdd, 0x4e, 0x02,
    0x28, 0x03, 0xcb, 0x18, 0x17, 0xdd, 0x77, 0x19,
    0x07, 0x07, 0xdd, 0x77, 0x09, 0xdd, 0x70, 0x08,
    0xdd, 0x70, 0x18, 0xdd, 0x71, 0x1a, 0x3e, 0x03,
    0xa6, 0xdd, 0xb6, 0x09, 0xdd, 0x77, 0x17, 0x11,
    0x05, 0x00, 0x19, 0x7e, 0xdd, 0x77, 0x1c, 0x23,
    0x7e, 0xdd, 0x77, 0x1d, 0xdd, 0x46, 0x04, 0x11,
    0x00, 0x03, 0xc5, 0xd5, 0x3e, 0x08, 0xcd, 0x35,
    0x04, 0xcd, 0x09, 0x03, 0xfd, 0xe5, 0xcd, 0xc9,
    0x02, 0xcd, 0xfd, 0x02, 0xfd, 0xe1, 0x06, 0x07,
    0xdd, 0xe5, 0xe1, 0x11, 0x0e, 0x00, 0x19, 0xcd,
    0x21, 0x05, 0xed, 0xa2, 0x20, 0xf9, 0xd1, 0xc1,
    0xdd, 0x7e, 0x0e, 0xe6, 0x40, 0x28, 0x2d, 0xcd,
    0x83, 0x05, 0x3e, 0x01, 0xb9, 0x28, 0x15, 0x3e,
    0x06, 0xb9, 0xcc, 0x0a, 0x04, 0x3e, 0x02, 0xb9,
    0xcc, 0x30, 0x04, 0x1c, 0x3e, 0x0b, 0xb8, 0xcc,
    0x2c, 0x04, 0x10, 0xb6, 0xdd, 0x7e, 0x07, 0xfe,
    0xff, 0x28, 0x0a, 0xcd, 0x17, 0x03, 0x38, 0x05,
    0xb7, 0xc2, 0x64, 0x02, 0x4f, 0xdd, 0x71, 0x07,
    0xc9, 0x0e, 0xfb, 0xdd, 0xe5, 0xe1, 0x11, 0x15,
    0x00, 0x19, 0x46, 0x23, 0xcd, 0x11, 0x05, 0xcd,
    0x18, 0x05, 0xed, 0xa3, 0x20, 0xf9, 0xdd, 0x46,
    0x0c, 0xdd, 0x5e, 0x0d, 0xcb, 0xbb, 0xdd, 0x56,
    0x03, 0x15, 0xdd, 0x6e, 0x0a, 0xdd, 0x66, 0x0b,
    0xe5, 0xfd, 0xe1, 0xdd, 0x6e, 0x05, 0xdd, 0x66,
    0x06, 0xc9, 0xcb, 0x7f, 0xc0, 0xdb, 0xfa, 0xcb,
    0x6f, 0x28, 0xf7, 0xd5, 0x11, 0x00, 0x00, 0xfd,
    0xe9, 0x21, 0xcf, 0x05, 0xd5, 0x16, 0x00, 0xcb,
    0x2b, 0x19, 0xd1, 0x7e, 0xd3, 0xf7, 0xc9, 0x79,
    0x07, 0x5f, 0x16, 0x00, 0x21, 0x14, 0x06, 0x19,
    0x5e, 0x23, 0x56, 0xc5, 0xd5, 0x11, 0x88, 0x06,
    0xcd, 0xba, 0x01, 0x3e, 0x41, 0xdd, 0x86, 0x00,
    0xcd, 0xc3, 0x01, 0x11, 0x7b, 0x00, 0xcd, 0xba,
    0x01, 0xd1, 0xcd, 0xba, 0x01, 0xcd, 0x52, 0x03,
    0xc1, 0xc9, 0xcd, 0xba, 0x01, 0xcd, 0x78, 0x03,
    0xfe, 0x0d, 0x20, 0xf9, 0x11, 0x78, 0x00, 0xc3,
    0xba, 0x01, 0x11, 0x9f, 0x06, 0xcd, 0xba, 0x01,
    0xcd, 0x78, 0x03, 0xe6, 0xdf, 0x5f, 0xfe, 0x41,
    0x37, 0x28, 0x08, 0xfe, 0x52, 0x28, 0x04, 0xd6,
    0x49, 0x20, 0xed, 0xf5, 0x7b, 0xcd, 0xc3, 0x01,
    0x11, 0x78, 0x00, 0xcd, 0xba, 0x01, 0xf1, 0xc9,
    0xe5, 0xfd, 0x6e, 0x18, 0xfd, 0x66, 0x19, 0xcd,
    0xd2, 0x01, 0xe1, 0xc9, 0xe6, 0x20, 0x28, 0x36,
    0xdb, 0xfa, 0xfe, 0xf0, 0x28, 0x0b, 0x1b, 0x7b,
    0xb2, 0x28, 0x2d, 0xdb, 0xfa, 0xfe, 0xf0, 0x20,
    0xeb, 0xed, 0xa2, 0xd1, 0xd5, 0x7b, 0xb2, 0x20,
    0x01, 0x05, 0xfb, 0x76, 0xdb, 0xfa, 0xe6, 0x20,
    0x28, 0x14, 0xed, 0xa2, 0x20, 0xf4, 0x1d, 0xf2,
    0x9d, 0x03, 0xd1, 0x15, 0xd5, 0xf2, 0x9d, 0x03,
    0xfb, 0x76, 0xdb, 0xf8, 0xed, 0xa2, 0xd1, 0xc9,
    0x3e, 0x08, 0xd3, 0xf7, 0xdb, 0xf5, 0xdb, 0xfa,
    0xcb, 0x6f, 0x20, 0xf8, 0x18, 0xf0, 0xe6, 0x20,
    0x28, 0xec, 0xdb, 0xfa, 0xfe, 0xb0, 0x28, 0x0b,
    0x1b, 0x7b, 0xb2, 0x28, 0xe3, 0xdb, 0xfa, 0xfe,
    0xb0, 0x20, 0xeb, 0xed, 0xa3, 0xd1, 0xd5, 0x7b,
    0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb, 0xfa,
    0xe6, 0x20, 0x28, 0xca, 0xed, 0xa3, 0x20, 0xf4,
    0x1d, 0xf2, 0xe7, 0x03, 0xd1, 0x15, 0xd5, 0xf2,
    0xe7, 0x03, 0xfb, 0x76, 0xdb, 0xf8, 0xed, 0xa3,
    0xd1, 0xc9, 0x1d, 0x15, 0xc0, 0x06, 0x01, 0xc9,
    0xfd, 0xcb, 0x0b, 0x4e, 0x20, 0x04, 0xfd, 0xcb,
    0x0b, 0x86, 0xdd, 0x7e, 0x00, 0xf5, 0xfd, 0x7e,
    0x00, 0xdd, 0x77, 0x00, 0xcd, 0x33, 0x04, 0xf1,
    0xdd, 0x77, 0x00, 0xc9, 0x1e, 0x00, 0x18, 0x03,
    0xcd, 0x0a, 0x04, 0x3e, 0x00, 0xc5, 0xd5, 0x4f,
    0xdd, 0x7e, 0x00, 0xf5, 0xcd, 0xb8, 0x04, 0x7e,
    0xe6, 0x07, 0x5f, 0x23, 0xf1, 0xfd, 0xbe, 0x11,
    0x28, 0x1b, 0xfd, 0x77, 0x11, 0xcb, 0x7e, 0xc5,
    0x28, 0x0f, 0xfd, 0xbe, 0x13, 0xfd, 0x77, 0x13,
    0xf5, 0xd5, 0xe5, 0xc4, 0xa5, 0x04, 0xe1, 0xd1,
    0xf1, 0xcd, 0x4d, 0x05, 0xc1, 0xcb, 0x76, 0x28,
    0x0f, 0x3e, 0x13, 0xcb, 0x6e, 0x28, 0x02, 0x3e,
    0x27, 0xdd, 0xbe, 0x08, 0x30, 0x02, 0xcb, 0xdb,
    0x3e, 0x07, 0xd3, 0xf7, 0xdb, 0xf5, 0xe6, 0x07,
    0x57, 0xa3, 0xf5, 0x7a, 0xb3, 0xd3, 0xf8, 0xfd,
    0x77, 0x12, 0xcd, 0xc9, 0x04, 0xdd, 0x7e, 0x08,
    0xcb, 0x59, 0x28, 0x03, 0xba, 0x28, 0x06, 0xcd,
    0x2a, 0x05, 0xf1, 0x37, 0xf5, 0xf1, 0x23, 0xcd,
    0xd1, 0x04, 0xd1, 0xc1, 0xc9, 0x3c, 0xcb, 0xf7,
    0xfd, 0x5e, 0x0f, 0xfd, 0x56, 0x10, 0x12, 0xfd,
    0x5e, 0x0d, 0xfd, 0x56, 0x0e, 0xc3, 0x42, 0x03,
    0xfd, 0xe5, 0xe1, 0x11, 0x1a, 0x00, 0x19, 0x57,
    0x07, 0x07, 0x07, 0x82, 0x5f, 0x16, 0x00, 0x19,
    0xc9, 0xe5, 0x11, 0x07, 0x00, 0x19, 0x56, 0xe1,
    0xc9, 0xfd, 0x46, 0x12, 0x0e, 0xf8, 0x56, 0x1e,
    0x00, 0x23, 0x30, 0x28, 0xed, 0x5e, 0x3e, 0x00,
    0xed, 0x47, 0x20, 0x0c, 0xfb, 0x1b, 0x7a, 0xb3,
    0x28, 0x08, 0x0e, 0xf8, 0xed, 0x41, 0x18, 0xf5,
    0x56, 0xfb, 0xed, 0x41, 0x18, 0xfc, 0xed, 0x46,
    0x33, 0x33, 0xcd, 0x76, 0x05, 0x7a, 0xbe, 0x30,
    0x04, 0x56, 0x18, 0x01, 0xc0, 0xed, 0x41, 0xed,
    0x41, 0x00, 0x1b, 0x7a, 0xb3, 0xc2, 0x05, 0x05,
    0xc9, 0xdb, 0xfa, 0xcb, 0x67, 0x20, 0xfa, 0xc9,
    0xdb, 0xfa, 0xe6, 0xc0, 0xfe, 0x80, 0x20, 0xf8,
    0xc9, 0xdb, 0xfa, 0xe6, 0xc0, 0xfe, 0xc0, 0x20,
    0xf8, 0xc9, 0xcd, 0x18, 0x05, 0x3e, 0x07, 0xb1,
    0xd3, 0xfb, 0xcd, 0x18, 0x05, 0x3e, 0x03, 0xa6,
    0xcb, 0x59, 0x28, 0x03, 0xdd, 0xb6, 0x09, 0xd3,
    0xfb, 0xcb, 0x59, 0xc8, 0xcd, 0x18, 0x05, 0xdd,
    0x7e, 0x08, 0xd3, 0xfb, 0xc9, 0xe5, 0x23, 0x23,
    0x23, 0xcd, 0x18, 0x05, 0x3e, 0x03, 0xd3, 0xfb,
    0x01, 0xfb, 0x02, 0xcd, 0x18, 0x05, 0xed, 0xa3,
    0x20, 0xf9, 0xe1, 0xc9, 0xcd, 0x18, 0x05, 0x3e,
    0x08, 0xd3, 0xfb, 0xcd, 0x21, 0x05, 0xdb, 0xfb,
    0xcd, 0x21, 0x05, 0xdb, 0xfb, 0xc9, 0xcd, 0x64,
    0x05, 0xe5, 0xd5, 0x11, 0x05, 0x00, 0x19, 0x77,
    0xd1, 0xe1, 0xc9, 0x0e, 0x01, 0xdd, 0xcb, 0x0f,
    0x4e, 0xc0, 0x0c, 0xdd, 0xcb, 0x10, 0x4e, 0xc0,
    0xdd, 0xcb, 0x10, 0x66, 0xc0, 0x0c, 0xdd, 0xcb,
    0x10, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x6e,
    0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x7e, 0xc0, 0xdd,
    0xcb, 0x0f, 0x56, 0xc0, 0xdd, 0xcb, 0x0f, 0x46,
    0xc0, 0xdd, 0xcb, 0x10, 0x76, 0xc0, 0xdd, 0xcb,
    0x10, 0x46, 0xc0, 0x0c, 0xdd, 0xcb, 0x0e, 0x5e,
    0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x0e, 0x66, 0xc0, 0x0c, 0xc9, 0x08,
    0x09, 0x07, 0x0a, 0x06, 0x00, 0x00, 0x01, 0x01,
    0x14, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x93, 0x03,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x09, 0x46, 0x00, 0x00, 0x00, 0x01, 0x03,
    0x05, 0x1c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
    0x00, 0x9c, 0x01, 0xa6, 0x01, 0x01, 0xd8, 0x58,
    0x05, 0x6f, 0x03, 0x05, 0x1c, 0xff, 0x35, 0x06,
    0x28, 0x06, 0x46, 0x06, 0x46, 0x06, 0x52, 0x06,
    0x68, 0x06, 0x5d, 0x06, 0x68, 0x06, 0x79, 0x06,
    0x57, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x72,
    0x61, 0x63, 0x6b, 0xae, 0x00, 0x57, 0x72, 0x69,
    0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65,
    0x63, 0x74, 0x65, 0x64, 0xae, 0x00, 0x44, 0x61,
    0x74, 0x61, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
    0xae, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f,
    0x75, 0x6e, 0x64, 0xae, 0x00, 0x4c, 0x6f, 0x73,
    0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0xae, 0x00,
    0x44, 0x72, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x6f,
    0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0xae,
    0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae, 0x00,
    0x0d, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x20, 0x65,
    0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20,
    0x64, 0x72, 0x69, 0x76, 0x65, 0xa0, 0x00, 0x0d,
    0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x52, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x41, 0x20,
    0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74,
    0x2c, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x20, 0x74,
    0x6f, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
    0x3a, 0xa0, 0x00, 0x0a, 0x45, 0x72, 0x72, 0x6f,
    0x72, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x50, 0x2f,
    0x4d, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x2e, 0x00, 0x0d, 0x0a, 0x50, 0x75, 0x73,
    0x68, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2e, 0xa0, 0x00, 0x0d,
    0x4d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x44, 0x65,
    0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2d,
    0x2d, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x52, 0x65,
    0x76, 0x2e, 0x20, 0x31, 0x2e, 0x33, 0x0d, 0x0a,
    0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
    0x74, 0x20, 0x31, 0x39, 0x38, 0x32, 0x20, 0x4d,
    0x6f, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x44, 0x65,
    0x73, 0x69, 0x67, 0x6e, 0x73, 0x2c, 0x20, 0x49,
    0x6e, 0x63, 0x2e, 0x0d, 0x0a, 0x0a, 0x00, 0x54,
    0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d,
    0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x2d, 0x2d,
    0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20,
    0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x79,
    0x3a, 0x20, 0x00, 0x4d, 0x65, 0x6d, 0x6f, 0x72,
    0x79, 0x20, 0x4f, 0x2e, 0x4b, 0x2e, 0x0d, 0x0a,
    0x0a, 0x00, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74,
    0x20, 0x43, 0x50, 0x2f, 0x4d, 0x20, 0x73, 0x79,
    0x73, 0x74, 0x65, 0x6d, 0x20, 0x64, 0x69, 0x73,
    0x6b, 0x65, 0x74, 0x74, 0x65, 0x20, 0x69, 0x6e,
    0x20, 0x44, 0x72, 0x69, 0x76, 0x65, 0x20, 0x41,
    0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x65,
    0x73, 0x73, 0x20, 0x5b, 0x52, 0x45, 0x54, 0x55,
    0x52, 0x4e, 0x5d, 0x20, 0x07, 0x00, 0x07, 0x07,
    0x52, 0x41, 0x4d, 0x20, 0x4d, 0x65, 0x6d, 0x6f,
    0x72, 0x79, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
    0x00, 0x07, 0x07, 0x52, 0x4f, 0x4d, 0x20, 0x4d,
    0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x65, 0x72,
    0x72, 0x6f, 0x72, 0x00, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0x13, 0xff, 0xff, 0xff,
    };

/* MD3 2.3 ROM is 4096 bytes */
static uint8 mmd_rom_23[MMD_ROM_SIZE] = {
    0xc3, 0x26, 0x00, 0xc3, 0xc3, 0x01, 0xc3, 0x5d,
    0x05, 0xc3, 0x01, 0x03, 0xc3, 0x0e, 0x03, 0xc3,
    0x92, 0x03, 0xc3, 0xd3, 0x04, 0xc3, 0x2a, 0x05,
    0xc3, 0x57, 0x01, 0xb1, 0x0e, 0xc3, 0x98, 0x01,
    0xc3, 0xde, 0x01, 0xc3, 0xf1, 0x01, 0xed, 0x46,
    0x31, 0x00, 0x00, 0xfd, 0x21, 0xd0, 0x0e, 0xcd,
    0x85, 0x00, 0xcd, 0x53, 0x00, 0x11, 0x37, 0x0c,
    0xcd, 0xba, 0x01, 0xcd, 0xaa, 0x00, 0xcd, 0xe9,
    0x00, 0xcd, 0xca, 0x00, 0xcd, 0x00, 0xfc, 0xdb,
    0xfc, 0xdb, 0xf5, 0xcb, 0x6f, 0xcc, 0x01, 0x08,
    0xc3, 0x03, 0x01, 0x3e, 0x80, 0xd3, 0xfd, 0xd3,
    0xff, 0xd3, 0xfd, 0xd3, 0xff, 0x3e, 0x40, 0xd3,
    0xfd, 0xd3, 0xff, 0x3e, 0xce, 0xd3, 0xfd, 0xd3,
    0xff, 0x3e, 0x37, 0xd3, 0xfd, 0xd3, 0xff, 0xc9,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72,
    0x06, 0x91, 0x9e, 0x3f, 0x0a, 0x3e, 0x3e, 0xd3,
    0xf3, 0x3e, 0xff, 0xd3, 0xf0, 0x3e, 0xff, 0xd3,
    0xf0, 0x3e, 0x7e, 0xd3, 0xf3, 0x3e, 0x0d, 0xd3,
    0xf1, 0x3e, 0x00, 0xd3, 0xf1, 0x3e, 0xbe, 0xd3,
    0xf3, 0x3e, 0x68, 0xd3, 0xf2, 0x3e, 0x00, 0xd3,
    0xf2, 0xc9, 0x21, 0x00, 0x00, 0x01, 0xfd, 0x0f,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0xf4, 0x0c, 0xcd,
    0xc3, 0x01, 0x18, 0x00, 0xdb, 0xf5, 0xcb, 0x6f,
    0xca, 0x47, 0x00, 0x11, 0x1b, 0x0c, 0xcd, 0xc3,
    0x01, 0x76, 0x21, 0x00, 0xfc, 0x01, 0xf8, 0x03,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0x07, 0x0d, 0xcd,
    0xc3, 0x01, 0x18, 0xe0, 0xaf, 0xf5, 0xf1, 0xae,
    0x23, 0x0b, 0xf5, 0x78, 0xb1, 0x20, 0xf7, 0xf1,
    0xc9, 0x21, 0x3f, 0x0a, 0x11, 0x00, 0xfc, 0x01,
    0x00, 0x01, 0xed, 0xb0, 0x01, 0xf7, 0x02, 0xd5,
    0xe1, 0x13, 0x36, 0xff, 0xed, 0xb0, 0x3a, 0x82,
    0x00, 0x77, 0xc9, 0xcd, 0x5d, 0x01, 0x3a, 0xea,
    0x0e, 0xe6, 0x03, 0xcb, 0x57, 0x28, 0x01, 0x0f,
    0x4f, 0x3a, 0xeb, 0x0e, 0xe6, 0x03, 0x47, 0x04,
    0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb1, 0x11, 0x00,
    0x40, 0xd3, 0xf7, 0x1b, 0x7a, 0xb3, 0x28, 0x13,
    0xdb, 0xf5, 0xcb, 0x57, 0x28, 0xf5, 0x1b, 0x7a,
    0xb3, 0x28, 0x08, 0xdb, 0xf5, 0xcb, 0x57, 0x20,
    0xf5, 0x18, 0x0f, 0x11, 0xb8, 0x0c, 0xcd, 0xc3,
    0x01, 0xcd, 0xb6, 0x04, 0x11, 0xab, 0x0e, 0xcd,
    0xc3, 0x01, 0xcd, 0x70, 0x05, 0xcd, 0x92, 0x03,
    0xdd, 0x7e, 0x07, 0xb7, 0xca, 0x00, 0xfe, 0x11,
    0xfb, 0x0b, 0xc3, 0xbc, 0x00, 0x21, 0xb1, 0x0e,
    0x11, 0x00, 0xff, 0x01, 0x5d, 0x00, 0xed, 0xb0,
    0xdd, 0x21, 0x00, 0xff, 0xfd, 0x21, 0x1f, 0xff,
    0xc9, 0x06, 0xff, 0x18, 0x02, 0x06, 0xfd, 0x78,
    0x41, 0x4f, 0xed, 0x78, 0xcb, 0x47, 0x28, 0xfa,
    0x78, 0x0d, 0xed, 0x79, 0xc9, 0x06, 0xff, 0x18,
    0x02, 0x06, 0xfd, 0x48, 0xed, 0x78, 0xcb, 0x4f,
    0x28, 0xfa, 0x0d, 0xed, 0x78, 0xe6, 0x7f, 0xc9,
    0xdb, 0xf5, 0xcb, 0x67, 0x20, 0xfa, 0x79, 0xd3,
    0xf4, 0x3e, 0x80, 0xd3, 0xf5, 0xaf, 0xd3, 0xf5,
    0x21, 0x40, 0x00, 0xdb, 0xf5, 0xcb, 0x5f, 0x28,
    0x07, 0x2b, 0x7d, 0xb4, 0x20, 0xf5, 0x3d, 0xc9,
    0xaf, 0xc9, 0x06, 0x32, 0x3e, 0x0a, 0xcd, 0xcc,
    0x01, 0x10, 0xf9, 0x1a, 0xb7, 0xc8, 0xcd, 0xcc,
    0x01, 0x13, 0x18, 0xf7, 0x4f, 0xc5, 0xd5, 0xe5,
    0xfd, 0x6e, 0x16, 0xfd, 0x66, 0x17, 0xcd, 0xdd,
    0x01, 0xe1, 0xd1, 0xc1, 0xc9, 0xe9, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xde, 0xfd, 0xcb,
    0x0b, 0xd6, 0xfd, 0x36, 0x0a, 0x02, 0xc3, 0x56,
    0x02, 0xfd, 0xcb, 0x0b, 0x9e, 0xfd, 0x71, 0x0a,
    0x79, 0xfe, 0x02, 0x20, 0x18, 0xfd, 0x7e, 0x08,
    0xfd, 0x77, 0x04, 0xfd, 0x7e, 0x00, 0xfd, 0x77,
    0x05, 0xfd, 0x7e, 0x01, 0xfd, 0x77, 0x06, 0xfd,
    0x7e, 0x02, 0xfd, 0x77, 0x07, 0xfd, 0x7e, 0x04,
    0xb7, 0x28, 0x33, 0xfd, 0x35, 0x04, 0xfd, 0x7e,
    0x00, 0xfd, 0xbe, 0x05, 0x20, 0x28, 0xfd, 0x7e,
    0x01, 0xfd, 0xbe, 0x06, 0x20, 0x20, 0xfd, 0x7e,
    0x02, 0xfd, 0xbe, 0x07, 0x20, 0x18, 0xfd, 0x34,
    0x07, 0xfd, 0x7e, 0x09, 0xfd, 0xbe, 0x07, 0x30,
    0x07, 0xfd, 0x34, 0x06, 0xfd, 0x36, 0x07, 0x01,
    0xfd, 0xcb, 0x0b, 0x96, 0x18, 0x08, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xd6, 0xdd, 0x36,
    0x07, 0x00, 0xfd, 0x7e, 0x00, 0xcd, 0x33, 0x06,
    0x23, 0x7e, 0xfd, 0x5e, 0x02, 0x1d, 0x53, 0xe6,
    0x18, 0x06, 0x00, 0xfe, 0x00, 0x28, 0x14, 0x06,
    0x01, 0xfe, 0x08, 0x28, 0x0c, 0x06, 0x03, 0xfe,
    0x10, 0x28, 0x04, 0x06, 0x07, 0xcb, 0x2b, 0xcb,
    0x2b, 0xcb, 0x2b, 0x1c, 0xfd, 0x73, 0x03, 0x78,
    0xa2, 0xfd, 0x77, 0x0c, 0xfd, 0xcb, 0x0b, 0x46,
    0xfd, 0xcb, 0x0b, 0xc6, 0x28, 0x22, 0xfd, 0x7e,
    0x00, 0xdd, 0xbe, 0x00, 0x20, 0x10, 0xfd, 0x7e,
    0x01, 0xdd, 0xbe, 0x01, 0x20, 0x08, 0xfd, 0x7e,
    0x03, 0xdd, 0xbe, 0x02, 0x28, 0x2a, 0xaf, 0xfd,
    0xcb, 0x0b, 0x4e, 0xc4, 0x0e, 0x03, 0xb7, 0xc0,
    0xfd, 0x7e, 0x00, 0xdd, 0x77, 0x00, 0xfd, 0x7e,
    0x01, 0xdd, 0x77, 0x01, 0xfd, 0x7e, 0x03, 0xdd,
    0x77, 0x02, 0xaf, 0xfd, 0xcb, 0x0b, 0x56, 0xc4,
    0x01, 0x03, 0xb7, 0xc0, 0xfd, 0xcb, 0x0b, 0x8e,
    0xfd, 0x6e, 0x0c, 0x26, 0x00, 0x29, 0x29, 0x29,
    0x29, 0x29, 0x29, 0x29, 0xdd, 0x5e, 0x05, 0xdd,
    0x56, 0x06, 0x19, 0xfd, 0x5e, 0x14, 0xfd, 0x56,
    0x15, 0x01, 0x80, 0x00, 0xfd, 0xcb, 0x0b, 0x5e,
    0x3e, 0x00, 0xc0, 0xfd, 0xcb, 0x0b, 0xce, 0xeb,
    0xc9, 0x21, 0xd3, 0x04, 0xdd, 0x75, 0x0a, 0xdd,
    0x74, 0x0b, 0x0e, 0x06, 0x18, 0x0b, 0x21, 0x2a,
    0x05, 0xdd, 0x75, 0x0a, 0xdd, 0x74, 0x0b, 0x0e,
    0x05, 0xdd, 0x7e, 0x00, 0xcd, 0x33, 0x06, 0x23,
    0x7e, 0xe6, 0x40, 0xb1, 0xdd, 0x77, 0x16, 0xdd,
    0x36, 0x15, 0x09, 0x3e, 0x18, 0xa6, 0x0f, 0x0f,
    0x0f, 0xdd, 0x77, 0x1b, 0x06, 0x80, 0x11, 0x80,
    0x00, 0xfe, 0x00, 0x28, 0x11, 0x06, 0xff, 0x11,
    0x00, 0x00, 0xfe, 0x01, 0x28, 0x08, 0x16, 0x01,
    0xfe, 0x02, 0x28, 0x02, 0x16, 0x03, 0xdd, 0x70,
    0x1e, 0xdd, 0xcb, 0x0d, 0x7e, 0x20, 0x06, 0xdd,
    0x73, 0x0c, 0xdd, 0x72, 0x0d, 0xaf, 0xcb, 0x56,
    0xdd, 0x46, 0x01, 0xdd, 0x4e, 0x02, 0x28, 0x03,
    0xcb, 0x18, 0x17, 0xdd, 0x77, 0x19, 0x07, 0x07,
    0xdd, 0x77, 0x09, 0xdd, 0x70, 0x08, 0xdd, 0x70,
    0x18, 0xdd, 0x71, 0x1a, 0x3e, 0x03, 0xa6, 0xdd,
    0xb6, 0x09, 0xdd, 0x77, 0x17, 0x11, 0x05, 0x00,
    0x19, 0x7e, 0xdd, 0x77, 0x1c, 0x23, 0x7e, 0xdd,
    0x77, 0x1d, 0xdd, 0x46, 0x04, 0x16, 0x03, 0xc5,
    0xd5, 0xcd, 0x74, 0x05, 0xfd, 0xe5, 0xcd, 0x0f,
    0x04, 0xcd, 0x43, 0x04, 0xfd, 0xe1, 0x06, 0x07,
    0xdd, 0xe5, 0xe1, 0x11, 0x0e, 0x00, 0x19, 0xcd,
    0xa6, 0x06, 0xed, 0xa2, 0x20, 0xf9, 0xd1, 0xc1,
    0xdd, 0x7e, 0x0e, 0xe6, 0xc0, 0x28, 0x35, 0xcd,
    0x0d, 0x07, 0x3e, 0x01, 0xb9, 0x28, 0x1d, 0x3e,
    0x06, 0xb9, 0xcc, 0x57, 0x05, 0x3e, 0x02, 0xb9,
    0xcc, 0x6c, 0x05, 0x3e, 0x05, 0xb9, 0xcc, 0xfa,
    0x03, 0xdd, 0x7e, 0x04, 0x0f, 0x3c, 0xb8, 0xcc,
    0x70, 0x05, 0x10, 0xb3, 0xdd, 0x7e, 0x07, 0xfe,
    0xfe, 0x28, 0x0a, 0xcd, 0x4f, 0x04, 0x38, 0x05,
    0xb7, 0xc2, 0x92, 0x03, 0x4f, 0xdd, 0x71, 0x07,
    0x79, 0xc9, 0xdd, 0x7e, 0x08, 0xfe, 0x03, 0xd0,
    0xf5, 0xdd, 0x36, 0x08, 0x03, 0xcd, 0x74, 0x05,
    0xf1, 0xdd, 0x77, 0x08, 0xc3, 0x6c, 0x05, 0x0e,
    0xfb, 0xdd, 0xe5, 0xe1, 0x11, 0x15, 0x00, 0x19,
    0x46, 0x23, 0xcd, 0x90, 0x06, 0xcd, 0x9d, 0x06,
    0xed, 0xa3, 0x20, 0xf9, 0xdd, 0x46, 0x0c, 0xdd,
    0x5e, 0x0d, 0xcb, 0xbb, 0xdd, 0x56, 0x03, 0x15,
    0xdd, 0x6e, 0x0a, 0xdd, 0x66, 0x0b, 0xe5, 0xfd,
    0xe1, 0xdd, 0x6e, 0x05, 0xdd, 0x66, 0x06, 0xc9,
    0xcb, 0x7f, 0xc0, 0xdb, 0xfa, 0xcb, 0x6f, 0x28,
    0xf7, 0xd5, 0x11, 0x00, 0x00, 0xfd, 0xe9, 0x79,
    0x07, 0x5f, 0x16, 0x00, 0x21, 0x0c, 0x0f, 0x19,
    0x5e, 0x23, 0x56, 0xc5, 0xd5, 0x11, 0xb0, 0x0b,
    0xcd, 0xc3, 0x01, 0x3e, 0x41, 0xdd, 0x86, 0x00,
    0xcd, 0xcc, 0x01, 0x11, 0xae, 0x0e, 0xcd, 0xc3,
    0x01, 0xd1, 0xcd, 0xc3, 0x01, 0x3e, 0xff, 0xdd,
    0xbe, 0x07, 0x37, 0xc4, 0x90, 0x04, 0xc1, 0xc9,
    0xcd, 0xc3, 0x01, 0xcd, 0xb6, 0x04, 0xfe, 0x0d,
    0x20, 0xf9, 0x11, 0xab, 0x0e, 0xc3, 0xc3, 0x01,
    0x11, 0xc7, 0x0b, 0xcd, 0xc3, 0x01, 0xcd, 0xb6,
    0x04, 0xe6, 0xdf, 0x5f, 0xfe, 0x41, 0x37, 0x28,
    0x08, 0xfe, 0x52, 0x28, 0x04, 0xd6, 0x49, 0x20,
    0xed, 0xf5, 0x7b, 0xcd, 0xcc, 0x01, 0x11, 0xab,
    0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xc9, 0xc5, 0xe5,
    0xfd, 0x6e, 0x18, 0xfd, 0x66, 0x19, 0xcd, 0xdd,
    0x01, 0xe1, 0xc1, 0xc9, 0xe6, 0x20, 0x28, 0x36,
    0xdb, 0xfa, 0xfe, 0xf0, 0x28, 0x0b, 0x1b, 0x7b,
    0xb2, 0x28, 0x2d, 0xdb, 0xfa, 0xfe, 0xf0, 0x20,
    0xeb, 0xed, 0xa2, 0xd1, 0xd5, 0x7b, 0xb2, 0x20,
    0x01, 0x05, 0xfb, 0x76, 0xdb, 0xfa, 0xe6, 0x20,
    0x28, 0x14, 0xed, 0xa2, 0x20, 0xf4, 0x1d, 0xf2,
    0xdd, 0x04, 0xd1, 0x15, 0xd5, 0xf2, 0xdd, 0x04,
    0xfb, 0x76, 0xdb, 0xf7, 0xed, 0xa2, 0xd1, 0xc9,
    0xd1, 0xe1, 0xfd, 0xe1, 0xfd, 0xe5, 0xc5, 0x0e,
    0xf7, 0xfd, 0x7e, 0x12, 0x47, 0xcb, 0xdf, 0xed,
    0x79, 0xdb, 0xfa, 0xcb, 0x6f, 0x20, 0xfa, 0xed,
    0x41, 0xc1, 0xe9, 0xe6, 0x20, 0x28, 0xdf, 0xdb,
    0xfa, 0xfe, 0xb0, 0x28, 0x0b, 0x1b, 0x7b, 0xb2,
    0x28, 0xd6, 0xdb, 0xfa, 0xfe, 0xb0, 0x20, 0xeb,
    0xed, 0xa3, 0xd1, 0xd5, 0x7b, 0xb2, 0x20, 0x01,
    0x05, 0xfb, 0x76, 0xdb, 0xfa, 0xe6, 0x20, 0x28,
    0xbd, 0xed, 0xa3, 0x20, 0xf4, 0x1d, 0xf2, 0x34,
    0x05, 0xd1, 0x15, 0xd5, 0xf2, 0x34, 0x05, 0xfb,
    0x76, 0xdb, 0xf7, 0xed, 0xa3, 0xd1, 0xc9, 0x04,
    0x15, 0xc0, 0x06, 0x01, 0xc9, 0xfd, 0xcb, 0x0b,
    0x4e, 0x20, 0x04, 0xfd, 0xcb, 0x0b, 0x86, 0xfd,
    0x36, 0x01, 0x00, 0xc9, 0xcd, 0x57, 0x05, 0xc8,
    0x3e, 0x00, 0x18, 0x02, 0x3e, 0x08, 0xc5, 0xd5,
    0x4f, 0xdd, 0x7e, 0x00, 0xf5, 0xcd, 0x33, 0x06,
    0x7e, 0xe6, 0x07, 0xcb, 0x57, 0x28, 0x01, 0x0f,
    0x5f, 0x23, 0xf1, 0xfd, 0xbe, 0x11, 0x28, 0x1b,
    0xfd, 0x77, 0x11, 0xcb, 0x7e, 0xc5, 0x28, 0x0f,
    0xfd, 0xbe, 0x13, 0xfd, 0x77, 0x13, 0xf5, 0xd5,
    0xe5, 0xc4, 0x20, 0x06, 0xe1, 0xd1, 0xf1, 0xcd,
    0xd2, 0x06, 0xc1, 0xcb, 0x76, 0x28, 0x0f, 0x3e,
    0x13, 0xcb, 0x6e, 0x28, 0x02, 0x3e, 0x27, 0xdd,
    0xbe, 0x08, 0x30, 0x02, 0xcb, 0xd3, 0xdb, 0xf5,
    0xe6, 0x03, 0x57, 0xa3, 0xf5, 0x7e, 0xe6, 0x03,
    0x47, 0x04, 0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb2,
    0xb3, 0xd3, 0xf7, 0xfd, 0x77, 0x12, 0xcd, 0x44,
    0x06, 0xdd, 0x7e, 0x08, 0xcb, 0x59, 0x28, 0x0a,
    0xb7, 0x20, 0x04, 0xcb, 0x99, 0x18, 0x03, 0xba,
    0x28, 0x06, 0xcd, 0xaf, 0x06, 0xf1, 0x37, 0xf5,
    0xf1, 0xc5, 0xe5, 0xcd, 0x4c, 0x06, 0xe1, 0xc1,
    0xcb, 0x59, 0xcc, 0x00, 0x06, 0xd1, 0xc1, 0xc9,
    0xcd, 0x9d, 0x06, 0x3e, 0x04, 0xd3, 0xfb, 0xcd,
    0x9d, 0x06, 0x3e, 0x03, 0xa6, 0xd3, 0xfb, 0xcd,
    0xa6, 0x06, 0xdb, 0xfb, 0xe6, 0x10, 0xc0, 0xcd,
    0xaf, 0x06, 0x3e, 0xff, 0xb7, 0x37, 0x18, 0x2c,
    0x3c, 0xcb, 0xf7, 0xfd, 0x5e, 0x0f, 0xfd, 0x56,
    0x10, 0x12, 0xfd, 0x5e, 0x0d, 0xfd, 0x56, 0x0e,
    0xc3, 0x80, 0x04, 0xfd, 0xe5, 0xe1, 0x11, 0x1a,
    0x00, 0x19, 0x57, 0x07, 0x07, 0x07, 0x82, 0x5f,
    0x16, 0x00, 0x19, 0xc9, 0xe5, 0x11, 0x07, 0x00,
    0x19, 0x56, 0xe1, 0xc9, 0x23, 0xfd, 0x46, 0x12,
    0x0e, 0xf7, 0x56, 0x1e, 0x00, 0x23, 0x30, 0x28,
    0xed, 0x5e, 0x3e, 0x00, 0xed, 0x47, 0x20, 0x0c,
    0xfb, 0x1b, 0x7a, 0xb3, 0x28, 0x08, 0x0e, 0xf7,
    0xed, 0x41, 0x18, 0xf5, 0x56, 0xfb, 0xed, 0x41,
    0x18, 0xfc, 0xed, 0x46, 0x33, 0x33, 0xcd, 0x00,
    0x07, 0x7a, 0xbe, 0x30, 0x04, 0x56, 0x18, 0x01,
    0xc0, 0xed, 0x41, 0xed, 0x41, 0x00, 0x1b, 0x7a,
    0xb3, 0xc2, 0x81, 0x06, 0xc9, 0xcd, 0xe9, 0x06,
    0xdb, 0xfa, 0xe6, 0x0f, 0x20, 0xf7, 0xdb, 0xfa,
    0xcb, 0x67, 0x20, 0xf4, 0xc9, 0xdb, 0xfa, 0xe6,
    0xc0, 0xfe, 0x80, 0x20, 0xf8, 0xc9, 0xdb, 0xfa,
    0xe6, 0xc0, 0xfe, 0xc0, 0x20, 0xf8, 0xc9, 0xcd,
    0x9d, 0x06, 0x3e, 0x07, 0xb1, 0xd3, 0xfb, 0xcd,
    0x9d, 0x06, 0x3e, 0x03, 0xa6, 0xcb, 0x59, 0x28,
    0x03, 0xdd, 0xb6, 0x09, 0xd3, 0xfb, 0xcb, 0x59,
    0xc8, 0xcd, 0x9d, 0x06, 0xdd, 0x7e, 0x08, 0xd3,
    0xfb, 0xc9, 0xe5, 0x23, 0x23, 0x23, 0xcd, 0x9d,
    0x06, 0x3e, 0x03, 0xd3, 0xfb, 0x01, 0xfb, 0x02,
    0xcd, 0x9d, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xe1,
    0xc9, 0xcd, 0x9d, 0x06, 0x3e, 0x08, 0xd3, 0xfb,
    0xcd, 0xa6, 0x06, 0xdb, 0xfb, 0xe6, 0xc0, 0xfe,
    0x80, 0xc8, 0xcd, 0xa6, 0x06, 0xdb, 0xfb, 0xc9,
    0xcd, 0xe9, 0x06, 0xe5, 0xd5, 0x11, 0x05, 0x00,
    0x19, 0x77, 0xd1, 0xe1, 0xc9, 0x0e, 0x01, 0xdd,
    0xcb, 0x0f, 0x4e, 0xc0, 0x0c, 0xdd, 0xcb, 0x10,
    0x4e, 0xc0, 0xdd, 0xcb, 0x10, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x10, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb,
    0x0f, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x7e,
    0xc0, 0xdd, 0xcb, 0x0f, 0x56, 0xc0, 0xdd, 0xcb,
    0x0f, 0x46, 0xc0, 0xdd, 0xcb, 0x10, 0x76, 0xc0,
    0xdd, 0xcb, 0x10, 0x46, 0xc0, 0x0c, 0xdd, 0xcb,
    0x0e, 0x5e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x66,
    0xc0, 0x0c, 0xdd, 0xcb, 0x0e, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x0e, 0x7e, 0xc0, 0x0c, 0xc9, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0x13, 0x22, 0x23, 0xff,
    0xff, 0x11, 0x41, 0x0d, 0xcd, 0xc3, 0x01, 0xcd,
    0xb6, 0x04, 0xfe, 0x31, 0xfa, 0x07, 0x08, 0xfe,
    0x3a, 0xf2, 0x07, 0x08, 0xf5, 0xcd, 0xcc, 0x01,
    0x11, 0xab, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xd6,
    0x30, 0xfe, 0x04, 0xf2, 0x29, 0x08, 0x32, 0xfe,
    0xff, 0x3d, 0x07, 0x4f, 0xaf, 0x47, 0x21, 0x3b,
    0x08, 0x09, 0x5e, 0x23, 0x56, 0xeb, 0xcd, 0xdd,
    0x01, 0x18, 0xc6, 0x4d, 0x08, 0x4d, 0x08, 0x4d,
    0x08, 0xa3, 0x08, 0xcd, 0x08, 0x21, 0x09, 0xc9,
    0x09, 0x1a, 0x0a, 0x3d, 0x0a, 0x3e, 0x20, 0x32,
    0xfd, 0xff, 0x3e, 0x5f, 0x47, 0x3a, 0xfd, 0xff,
    0xcd, 0x80, 0x08, 0x05, 0x28, 0x08, 0x3c, 0xf2,
    0x58, 0x08, 0x3e, 0x20, 0x18, 0xf2, 0xcd, 0x9e,
    0x08, 0xc0, 0x3e, 0x0d, 0xcd, 0x80, 0x08, 0x3e,
    0x0a, 0xcd, 0x80, 0x08, 0x3a, 0xfd, 0xff, 0x3c,
    0xfa, 0x4d, 0x08, 0x32, 0xfd, 0xff, 0x18, 0xd2,
    0xf5, 0xc5, 0x4f, 0x3a, 0xfe, 0xff, 0xfe, 0x01,
    0x20, 0x05, 0xcd, 0x75, 0x01, 0x18, 0x0c, 0xfe,
    0x02, 0x20, 0x05, 0xcd, 0x71, 0x01, 0x18, 0x03,
    0xcd, 0x98, 0x01, 0xc1, 0xf1, 0xc9, 0xdb, 0xfd,
    0xcb, 0x4f, 0xc9, 0xdb, 0xfe, 0xaf, 0x57, 0x4f,
    0xcd, 0x71, 0x01, 0xcd, 0x85, 0x01, 0xba, 0x20,
    0x0f, 0xcd, 0x9e, 0x08, 0x20, 0x05, 0x7a, 0x3c,
    0xf2, 0xa6, 0x08, 0x11, 0x49, 0x0e, 0x18, 0x03,
    0x11, 0x3f, 0x0e, 0xcd, 0xc3, 0x01, 0x11, 0x34,
    0x0e, 0xcd, 0xc3, 0x01, 0xc9, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0xcd, 0xee, 0x08, 0x21, 0x00,
    0x00, 0x01, 0xff, 0xfb, 0xcd, 0x2a, 0xfc, 0xb7,
    0x28, 0x03, 0xcd, 0xf6, 0x08, 0xcd, 0xfe, 0x08,
    0xcd, 0x9e, 0x08, 0x28, 0xe9, 0xc9, 0xaf, 0x32,
    0xfe, 0xff, 0x32, 0xfd, 0xff, 0xc9, 0x3a, 0xfd,
    0xff, 0x3c, 0x32, 0xfd, 0xff, 0xc9, 0x11, 0x15,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfe, 0xff, 0x3c,
    0x32, 0xfe, 0xff, 0xcd, 0xb3, 0xfc, 0x11, 0xae,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfd, 0xff, 0xcd,
    0xb3, 0xfc, 0x11, 0x24, 0x0e, 0xcd, 0xc3, 0x01,
    0xc9, 0xcd, 0x3e, 0x09, 0xdd, 0x36, 0x01, 0x27,
    0xdd, 0x36, 0x03, 0x05, 0xcd, 0x74, 0x09, 0xcd,
    0xee, 0x08, 0xcd, 0x9b, 0x09, 0xcd, 0xac, 0x09,
    0xcd, 0x9e, 0x08, 0x28, 0xf5, 0xc9, 0xcd, 0x5d,
    0x01, 0x11, 0x53, 0x0e, 0xcd, 0xc3, 0x01, 0xcd,
    0xb6, 0x04, 0xe6, 0xdf, 0xd6, 0x41, 0x38, 0xf7,
    0xfe, 0x04, 0x30, 0xf3, 0xdd, 0x77, 0x00, 0xf5,
    0x11, 0x6e, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xc6,
    0x41, 0xcd, 0xcc, 0x01, 0x11, 0xde, 0x0c, 0xcd,
    0xc3, 0x01, 0xcd, 0xb6, 0x04, 0x11, 0xab, 0x0e,
    0xcd, 0xc3, 0x01, 0xc9, 0x01, 0x5f, 0xaa, 0x21,
    0x00, 0x80, 0xe5, 0x11, 0x02, 0x80, 0x71, 0x23,
    0x70, 0x2b, 0x01, 0x00, 0x08, 0xed, 0xb0, 0x01,
    0xb6, 0x6d, 0x71, 0x23, 0x70, 0x2b, 0x01, 0x00,
    0x0c, 0xed, 0xb0, 0xc1, 0xdd, 0x71, 0x05, 0xdd,
    0x70, 0x06, 0xc9, 0x11, 0x96, 0x0e, 0xcd, 0xc3,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x0e, 0x03,
    0xcd, 0xc0, 0x09, 0xc9, 0x11, 0xa3, 0x0e, 0xcd,
    0xc3, 0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01,
    0x03, 0xcd, 0xc0, 0x09, 0xcd, 0xfe, 0x08, 0xc9,
    0xdd, 0x7e, 0x07, 0xfe, 0x00, 0xc4, 0xf6, 0x08,
    0xc9, 0xcd, 0x3e, 0x09, 0x06, 0x00, 0x0e, 0x27,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x03, 0x01, 0xcd, 0xee, 0x08, 0xc5,
    0xcd, 0xfd, 0x09, 0xc1, 0xcd, 0xed, 0x09, 0xcd,
    0x9e, 0x08, 0x28, 0xf3, 0xc9, 0x04, 0x0d, 0xfa,
    0xf3, 0x09, 0xc9, 0x78, 0x41, 0x4f, 0xc5, 0xcd,
    0xfe, 0x08, 0xc1, 0x18, 0xf0, 0xc5, 0xdd, 0x70,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01, 0x03,
    0xcd, 0xc0, 0x09, 0xc1, 0xdd, 0x71, 0x01, 0xdd,
    0x36, 0x07, 0xff, 0xcd, 0x01, 0x03, 0xcd, 0xc0,
    0x09, 0xc9, 0xcd, 0x5d, 0x01, 0xaf, 0xdd, 0x77,
    0x00, 0xdd, 0x77, 0x01, 0xdd, 0x36, 0x03, 0x01,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x07, 0xfe, 0xcd, 0x01, 0x03, 0xcd,
    0x9e, 0x08, 0x28, 0xf4, 0xc9, 0xf1, 0xc9, 0xdb,
    0xf6, 0x3a, 0x00, 0x00, 0xfe, 0xc3, 0xd3, 0xf6,
    0x20, 0x03, 0xc3, 0x47, 0x00, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0x21, 0x00, 0x00, 0x01, 0xff,
    0xfb, 0xcd, 0x2a, 0xfc, 0xb7, 0xc2, 0xd4, 0x00,
    0x11, 0xa9, 0x0c, 0xcd, 0xc3, 0x01, 0xc3, 0x47,
    0x00, 0xdb, 0xf6, 0x22, 0x00, 0xfd, 0x21, 0xd2,
    0xfc, 0x56, 0x23, 0xcb, 0x7e, 0x20, 0x18, 0x5e,
    0xcb, 0x73, 0xcb, 0xb3, 0x23, 0xe5, 0x28, 0x05,
    0xcd, 0x54, 0xfc, 0x18, 0x07, 0xdd, 0x21, 0x74,
    0xfc, 0xcd, 0x58, 0xfc, 0xe1, 0x18, 0xe2, 0xaf,
    0xd3, 0xf6, 0xc9, 0xdd, 0x21, 0x76, 0xfc, 0x2a,
    0x00, 0xfd, 0x7b, 0x85, 0x6f, 0x7c, 0xce, 0x00,
    0x67, 0xcd, 0x72, 0xfc, 0x23, 0x23, 0x23, 0x78,
    0xbc, 0xd8, 0x20, 0xf5, 0x79, 0xbd, 0xd8, 0x18,
    0xf0, 0xdd, 0xe9, 0x72, 0xc9, 0x7e, 0xba, 0x20,
    0x01, 0xc9, 0xd3, 0xf6, 0xdb, 0xf5, 0xcb, 0x6f,
    0xcc, 0x8a, 0xfc, 0xf1, 0xf1, 0xf1, 0x3e, 0xff,
    0xc9, 0xd5, 0x11, 0x1a, 0x0d, 0xcd, 0xc3, 0x01,
    0xdb, 0xf6, 0x7e, 0xd3, 0xf6, 0xcd, 0xb3, 0xfc,
    0x11, 0x24, 0x0d, 0xcd, 0xc3, 0x01, 0xd1, 0x7a,
    0xcd, 0xb3, 0xfc, 0x11, 0x2f, 0x0d, 0xcd, 0xc3,
    0x01, 0x7c, 0xcd, 0xb3, 0xfc, 0x7d, 0xcd, 0xb3,
    0xfc, 0xc9, 0xf5, 0x0f, 0x0f, 0x0f, 0x0f, 0xe6,
    0x0f, 0xcd, 0xc4, 0xfc, 0xf1, 0xe6, 0x0f, 0xcd,
    0xc4, 0xfc, 0xc9, 0xfe, 0x0a, 0xfa, 0xcb, 0xfc,
    0xc6, 0x07, 0xc6, 0x30, 0x4f, 0xcd, 0xcc, 0x01,
    0xc9, 0xff, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00,
    0x41, 0xff, 0x42, 0xff, 0x40, 0x00, 0x00, 0xff,
    0x01, 0x00, 0x02, 0x00, 0x42, 0x00, 0x40, 0xff,
    0x41, 0xaa, 0x00, 0x55, 0x02, 0xaa, 0x01, 0xaa,
    0x41, 0x55, 0x01, 0xaa, 0x40, 0x55, 0x00, 0x55,
    0x42, 0x55, 0x41, 0x55, 0x40, 0x00, 0x80, 0x57,
    0x72, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x72, 0x61,
    0x63, 0x6b, 0xae, 0x00, 0x57, 0x72, 0x69, 0x74,
    0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63,
    0x74, 0x65, 0x64, 0xae, 0x00, 0x44, 0x61, 0x74,
    0x61, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae,
    0x00, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75,
    0x6e, 0x64, 0xae, 0x00, 0x4c, 0x6f, 0x73, 0x74,
    0x20, 0x64, 0x61, 0x74, 0x61, 0xae, 0x00, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74,
    0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0xae, 0x00,
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
    0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xae,
    0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae, 0x00,
    0x0d, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x20, 0x65,
    0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20,
    0x64, 0x72, 0x69, 0x76, 0x65, 0xa0, 0x00, 0x0d,
    0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x52, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x41, 0x20,
    0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74,
    0x2c, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x20, 0x74,
    0x6f, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
    0x3a, 0xa0, 0x00, 0x0a, 0x45, 0x72, 0x72, 0x6f,
    0x72, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x50, 0x2f,
    0x4d, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x2e, 0x00, 0x0d, 0x0a, 0x50, 0x75, 0x73,
    0x68, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2e, 0xa0, 0x00, 0x0d,
    0x4d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x44, 0x65,
    0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2d,
    0x2d, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x52, 0x65,
    0x76, 0x2e, 0x20, 0x32, 0x2e, 0x33, 0x0d, 0x0a,
    0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
    0x74, 0x20, 0x31, 0x39, 0x38, 0x32, 0x2c, 0x20,
    0x31, 0x39, 0x38, 0x33, 0x20, 0x4d, 0x6f, 0x72,
    0x72, 0x6f, 0x77, 0x20, 0x44, 0x65, 0x73, 0x69,
    0x67, 0x6e, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63,
    0x2e, 0x0d, 0x0a, 0x0a, 0x00, 0x54, 0x65, 0x73,
    0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x2d, 0x2d, 0x20, 0x70,
    0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x73, 0x74,
    0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x3a, 0x20,
    0x00, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20,
    0x4f, 0x2e, 0x4b, 0x2e, 0x0d, 0x0a, 0x0a, 0x00,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x43,
    0x50, 0x2f, 0x4d, 0x20, 0x73, 0x79, 0x73, 0x74,
    0x65, 0x6d, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x41, 0x20, 0x61,
    0x6e, 0x64, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73,
    0x20, 0x5b, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e,
    0x5d, 0x20, 0x07, 0x00, 0x07, 0x07, 0x52, 0x4f,
    0x4d, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x07,
    0x07, 0x52, 0x41, 0x4d, 0x20, 0x4d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x65, 0x72, 0x72, 0x6f,
    0x72, 0x00, 0x07, 0x07, 0x0d, 0x0a, 0x52, 0x65,
    0x61, 0x64, 0x20, 0x00, 0x20, 0x65, 0x78, 0x70,
    0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x00, 0x20,
    0x61, 0x74, 0x20, 0x52, 0x41, 0x4d, 0x20, 0x6c,
    0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
    0x00, 0x0d, 0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e,
    0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x20, 0x4d,
    0x65, 0x6e, 0x75, 0x0d, 0x0a, 0x0a, 0x31, 0x29,
    0x20, 0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x5c, 0x0d, 0x0a, 0x32, 0x29, 0x20, 0x50,
    0x6f, 0x72, 0x74, 0x20, 0x32, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x3e, 0x20, 0x42, 0x61, 0x72, 0x62, 0x65, 0x72,
    0x2d, 0x50, 0x6f, 0x6c, 0x65, 0x20, 0x70, 0x61,
    0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x74, 0x65,
    0x73, 0x74, 0x0d, 0x0a, 0x33, 0x29, 0x20, 0x43,
    0x65, 0x6e, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63,
    0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x2f,
    0x0d, 0x0a, 0x34, 0x29, 0x20, 0x4c, 0x6f, 0x6f,
    0x70, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6f,
    0x6e, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x32,
    0x0d, 0x0a, 0x35, 0x29, 0x20, 0x52, 0x41, 0x4d,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x0d, 0x0a, 0x36,
    0x29, 0x20, 0x46, 0x44, 0x43, 0x20, 0x52, 0x2f,
    0x57, 0x0d, 0x0a, 0x37, 0x29, 0x20, 0x46, 0x44,
    0x43, 0x20, 0x73, 0x65, 0x65, 0x6b, 0x20, 0x74,
    0x65, 0x73, 0x74, 0x0d, 0x0a, 0x38, 0x29, 0x20,
    0x56, 0x46, 0x4f, 0x20, 0x74, 0x65, 0x73, 0x74,
    0x0d, 0x0a, 0x39, 0x29, 0x20, 0x42, 0x6f, 0x6f,
    0x74, 0x0d, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x65,
    0x72, 0x20, 0x23, 0x3a, 0x00, 0x0d, 0x0a, 0x45,
    0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61,
    0x73, 0x73, 0x20, 0x00, 0x20, 0x65, 0x72, 0x72,
    0x6f, 0x72, 0x73, 0x20, 0x73, 0x6f, 0x20, 0x66,
    0x61, 0x72, 0x2e, 0x00, 0x6c, 0x6f, 0x6f, 0x70,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x00, 0x0d,
    0x0a, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20,
    0x00, 0x0d, 0x0a, 0x50, 0x61, 0x73, 0x73, 0x65,
    0x64, 0x20, 0x00, 0x45, 0x6e, 0x74, 0x65, 0x72,
    0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x20, 0x74,
    0x6f, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x28,
    0x41, 0x2d, 0x44, 0x29, 0x3a, 0x00, 0x0d, 0x0a,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61,
    0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74,
    0x65, 0x64, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x64,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x00, 0x0d, 0x0a,
    0x57, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x2e,
    0x2e, 0x2e, 0x00, 0x72, 0x65, 0x61, 0x64, 0x69,
    0x6e, 0x67, 0x00, 0x0d, 0x0a, 0x00, 0x3a, 0xa0,
    0x00, 0x00, 0x00, 0x01, 0x01, 0x14, 0x00, 0xfe,
    0x00, 0x00, 0x00, 0xd3, 0x04, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46,
    0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0x1c, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x75, 0x01,
    0x89, 0x01, 0x01, 0xd8, 0x58, 0x05, 0x6f, 0x03,
    0x05, 0x1c, 0xff, 0x02, 0x59, 0x58, 0x05, 0x6f,
    0x03, 0x05, 0x1c, 0xff, 0x04, 0x5a, 0x58, 0x05,
    0x6f, 0x03, 0x05, 0x1c, 0xff, 0x04, 0x5b, 0x58,
    0x05, 0x6f, 0x03, 0x05, 0x1c, 0xff, 0x4c, 0x0b,
    0x3f, 0x0b, 0x5d, 0x0b, 0x5d, 0x0b, 0x69, 0x0b,
    0x7f, 0x0b, 0x74, 0x0b, 0x7f, 0x0b, 0x90, 0x0b,
    0xa1, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    };

/* MD3 2.4 ROM is 4096 bytes */
static uint8 mmd_rom_24[MMD_ROM_SIZE] = {
    0xc3, 0x26, 0x00, 0xc3, 0xc3, 0x01, 0xc3, 0x70,
    0x05, 0xc3, 0x01, 0x03, 0xc3, 0x0e, 0x03, 0xc3,
    0x92, 0x03, 0xc3, 0xe6, 0x04, 0xc3, 0x3d, 0x05,
    0xc3, 0x57, 0x01, 0xb1, 0x0e, 0xc3, 0x98, 0x01,
    0xc3, 0xde, 0x01, 0xc3, 0xf1, 0x01, 0xed, 0x46,
    0x31, 0x00, 0x00, 0xfd, 0x21, 0xd0, 0x0e, 0xcd,
    0x85, 0x00, 0xcd, 0x53, 0x00, 0x11, 0x37, 0x0c,
    0xcd, 0xba, 0x01, 0xcd, 0xaa, 0x00, 0xcd, 0xe9,
    0x00, 0xcd, 0xca, 0x00, 0xcd, 0x00, 0xfc, 0xdb,
    0xfc, 0xdb, 0xf5, 0xcb, 0x6f, 0xcc, 0x01, 0x08,
    0xc3, 0x03, 0x01, 0x3e, 0x80, 0xd3, 0xfd, 0xd3,
    0xff, 0xd3, 0xfd, 0xd3, 0xff, 0x3e, 0x40, 0xd3,
    0xfd, 0xd3, 0xff, 0x3e, 0xce, 0xd3, 0xfd, 0xd3,
    0xff, 0x3e, 0x37, 0xd3, 0xfd, 0xd3, 0xff, 0xc9,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81,
    0x06, 0xdd, 0x9e, 0x3f, 0x0a, 0x3e, 0x3e, 0xd3,
    0xf3, 0x3e, 0xff, 0xd3, 0xf0, 0x3e, 0xff, 0xd3,
    0xf0, 0x3e, 0x7e, 0xd3, 0xf3, 0x3e, 0x0d, 0xd3,
    0xf1, 0x3e, 0x00, 0xd3, 0xf1, 0x3e, 0xbe, 0xd3,
    0xf3, 0x3e, 0x68, 0xd3, 0xf2, 0x3e, 0x00, 0xd3,
    0xf2, 0xc9, 0x21, 0x00, 0x00, 0x01, 0xfd, 0x0f,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0xf4, 0x0c, 0xcd,
    0xc3, 0x01, 0x18, 0x00, 0xdb, 0xf5, 0xcb, 0x6f,
    0xca, 0x47, 0x00, 0x11, 0x1b, 0x0c, 0xcd, 0xc3,
    0x01, 0x76, 0x21, 0x00, 0xfc, 0x01, 0xf8, 0x03,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0x07, 0x0d, 0xcd,
    0xc3, 0x01, 0x18, 0xe0, 0xaf, 0xf5, 0xf1, 0xae,
    0x23, 0x0b, 0xf5, 0x78, 0xb1, 0x20, 0xf7, 0xf1,
    0xc9, 0x21, 0x3f, 0x0a, 0x11, 0x00, 0xfc, 0x01,
    0x00, 0x01, 0xed, 0xb0, 0x01, 0xf7, 0x02, 0xd5,
    0xe1, 0x13, 0x36, 0xff, 0xed, 0xb0, 0x3a, 0x82,
    0x00, 0x77, 0xc9, 0xcd, 0x5d, 0x01, 0x3a, 0xea,
    0x0e, 0xe6, 0x03, 0xcb, 0x57, 0x28, 0x01, 0x0f,
    0x4f, 0x3a, 0xeb, 0x0e, 0xe6, 0x03, 0x47, 0x04,
    0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb1, 0x11, 0x00,
    0x60, 0xd3, 0xf7, 0x1b, 0x7a, 0xb3, 0x28, 0x13,
    0xdb, 0xf5, 0xcb, 0x57, 0x28, 0xf5, 0x1b, 0x7a,
    0xb3, 0x28, 0x08, 0xdb, 0xf5, 0xcb, 0x57, 0x20,
    0xf5, 0x18, 0x0f, 0x11, 0xb8, 0x0c, 0xcd, 0xc3,
    0x01, 0xcd, 0xc9, 0x04, 0x11, 0xab, 0x0e, 0xcd,
    0xc3, 0x01, 0xcd, 0x7f, 0x05, 0xcd, 0x92, 0x03,
    0xdd, 0x7e, 0x07, 0xb7, 0xca, 0x00, 0xfe, 0x11,
    0xfb, 0x0b, 0xc3, 0xbc, 0x00, 0x21, 0xb1, 0x0e,
    0x11, 0x00, 0xff, 0x01, 0x5d, 0x00, 0xed, 0xb0,
    0xdd, 0x21, 0x00, 0xff, 0xfd, 0x21, 0x1f, 0xff,
    0xc9, 0x06, 0xff, 0x18, 0x02, 0x06, 0xfd, 0x78,
    0x41, 0x4f, 0xed, 0x78, 0xcb, 0x47, 0x28, 0xfa,
    0x78, 0x0d, 0xed, 0x79, 0xc9, 0x06, 0xff, 0x18,
    0x02, 0x06, 0xfd, 0x48, 0xed, 0x78, 0xcb, 0x4f,
    0x28, 0xfa, 0x0d, 0xed, 0x78, 0xe6, 0x7f, 0xc9,
    0xdb, 0xf5, 0xcb, 0x67, 0x20, 0xfa, 0x79, 0xd3,
    0xf4, 0x3e, 0x80, 0xd3, 0xf5, 0xaf, 0xd3, 0xf5,
    0x21, 0x40, 0x00, 0xdb, 0xf5, 0xcb, 0x5f, 0x28,
    0x07, 0x2b, 0x7d, 0xb4, 0x20, 0xf5, 0x3d, 0xc9,
    0xaf, 0xc9, 0x06, 0x32, 0x3e, 0x0a, 0xcd, 0xcc,
    0x01, 0x10, 0xf9, 0x1a, 0xb7, 0xc8, 0xcd, 0xcc,
    0x01, 0x13, 0x18, 0xf7, 0x4f, 0xc5, 0xd5, 0xe5,
    0xfd, 0x6e, 0x16, 0xfd, 0x66, 0x17, 0xcd, 0xdd,
    0x01, 0xe1, 0xd1, 0xc1, 0xc9, 0xe9, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xde, 0xfd, 0xcb,
    0x0b, 0xd6, 0xfd, 0x36, 0x0a, 0x02, 0xc3, 0x56,
    0x02, 0xfd, 0xcb, 0x0b, 0x9e, 0xfd, 0x71, 0x0a,
    0x79, 0xfe, 0x02, 0x20, 0x18, 0xfd, 0x7e, 0x08,
    0xfd, 0x77, 0x04, 0xfd, 0x7e, 0x00, 0xfd, 0x77,
    0x05, 0xfd, 0x7e, 0x01, 0xfd, 0x77, 0x06, 0xfd,
    0x7e, 0x02, 0xfd, 0x77, 0x07, 0xfd, 0x7e, 0x04,
    0xb7, 0x28, 0x33, 0xfd, 0x35, 0x04, 0xfd, 0x7e,
    0x00, 0xfd, 0xbe, 0x05, 0x20, 0x28, 0xfd, 0x7e,
    0x01, 0xfd, 0xbe, 0x06, 0x20, 0x20, 0xfd, 0x7e,
    0x02, 0xfd, 0xbe, 0x07, 0x20, 0x18, 0xfd, 0x34,
    0x07, 0xfd, 0x7e, 0x09, 0xfd, 0xbe, 0x07, 0x30,
    0x07, 0xfd, 0x34, 0x06, 0xfd, 0x36, 0x07, 0x01,
    0xfd, 0xcb, 0x0b, 0x96, 0x18, 0x08, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xd6, 0xdd, 0x36,
    0x07, 0x00, 0xfd, 0x7e, 0x00, 0xcd, 0x42, 0x06,
    0x23, 0x7e, 0xfd, 0x5e, 0x02, 0x1d, 0x53, 0xe6,
    0x18, 0x06, 0x00, 0xfe, 0x00, 0x28, 0x14, 0x06,
    0x01, 0xfe, 0x08, 0x28, 0x0c, 0x06, 0x03, 0xfe,
    0x10, 0x28, 0x04, 0x06, 0x07, 0xcb, 0x2b, 0xcb,
    0x2b, 0xcb, 0x2b, 0x1c, 0xfd, 0x73, 0x03, 0x78,
    0xa2, 0xfd, 0x77, 0x0c, 0xfd, 0xcb, 0x0b, 0x46,
    0xfd, 0xcb, 0x0b, 0xc6, 0x28, 0x22, 0xfd, 0x7e,
    0x00, 0xdd, 0xbe, 0x00, 0x20, 0x10, 0xfd, 0x7e,
    0x01, 0xdd, 0xbe, 0x01, 0x20, 0x08, 0xfd, 0x7e,
    0x03, 0xdd, 0xbe, 0x02, 0x28, 0x2a, 0xaf, 0xfd,
    0xcb, 0x0b, 0x4e, 0xc4, 0x0e, 0x03, 0xb7, 0xc0,
    0xfd, 0x7e, 0x00, 0xdd, 0x77, 0x00, 0xfd, 0x7e,
    0x01, 0xdd, 0x77, 0x01, 0xfd, 0x7e, 0x03, 0xdd,
    0x77, 0x02, 0xaf, 0xfd, 0xcb, 0x0b, 0x56, 0xc4,
    0x01, 0x03, 0xb7, 0xc0, 0xfd, 0xcb, 0x0b, 0x8e,
    0xfd, 0x6e, 0x0c, 0x26, 0x00, 0x29, 0x29, 0x29,
    0x29, 0x29, 0x29, 0x29, 0xdd, 0x5e, 0x05, 0xdd,
    0x56, 0x06, 0x19, 0xfd, 0x5e, 0x14, 0xfd, 0x56,
    0x15, 0x01, 0x80, 0x00, 0xfd, 0xcb, 0x0b, 0x5e,
    0x3e, 0x00, 0xc0, 0xfd, 0xcb, 0x0b, 0xce, 0xeb,
    0xc9, 0x21, 0xe6, 0x04, 0xdd, 0x75, 0x0a, 0xdd,
    0x74, 0x0b, 0x0e, 0x06, 0x18, 0x0b, 0x21, 0x3d,
    0x05, 0xdd, 0x75, 0x0a, 0xdd, 0x74, 0x0b, 0x0e,
    0x05, 0xdd, 0x7e, 0x00, 0xcd, 0x42, 0x06, 0x23,
    0x7e, 0xe6, 0x40, 0xb1, 0xdd, 0x77, 0x16, 0xdd,
    0x36, 0x15, 0x09, 0x3e, 0x18, 0xa6, 0x0f, 0x0f,
    0x0f, 0xdd, 0x77, 0x1b, 0x06, 0x80, 0x11, 0x80,
    0x00, 0xfe, 0x00, 0x28, 0x11, 0x06, 0xff, 0x11,
    0x00, 0x00, 0xfe, 0x01, 0x28, 0x08, 0x16, 0x01,
    0xfe, 0x02, 0x28, 0x02, 0x16, 0x03, 0xdd, 0x70,
    0x1e, 0xdd, 0xcb, 0x0d, 0x7e, 0x20, 0x06, 0xdd,
    0x73, 0x0c, 0xdd, 0x72, 0x0d, 0xaf, 0xcb, 0x56,
    0xdd, 0x46, 0x01, 0xdd, 0x4e, 0x02, 0x28, 0x03,
    0xcb, 0x18, 0x17, 0xdd, 0x77, 0x19, 0x07, 0x07,
    0xdd, 0x77, 0x09, 0xdd, 0x70, 0x08, 0xdd, 0x70,
    0x18, 0xdd, 0x71, 0x1a, 0x3e, 0x03, 0xa6, 0xdd,
    0xb6, 0x09, 0xdd, 0x77, 0x17, 0x11, 0x05, 0x00,
    0x19, 0x7e, 0xdd, 0x77, 0x1c, 0x23, 0x7e, 0xdd,
    0x77, 0x1d, 0xdd, 0x46, 0x04, 0x16, 0x03, 0xc5,
    0xd5, 0xcd, 0x83, 0x05, 0xfd, 0xe5, 0xcd, 0x22,
    0x04, 0xcd, 0x56, 0x04, 0xfd, 0xe1, 0x06, 0x07,
    0xdd, 0xe5, 0xe1, 0x11, 0x0e, 0x00, 0x19, 0xcd,
    0xb5, 0x06, 0xed, 0xa2, 0x20, 0xf9, 0xd1, 0xc1,
    0xdd, 0x7e, 0x0e, 0xe6, 0xc0, 0x28, 0x35, 0xcd,
    0x1c, 0x07, 0x3e, 0x01, 0xb9, 0x28, 0x1d, 0x3e,
    0x06, 0xb9, 0xcc, 0x6a, 0x05, 0x3e, 0x02, 0xb9,
    0xcc, 0xfa, 0x03, 0x3e, 0x05, 0xb9, 0xcc, 0x09,
    0x04, 0xdd, 0x7e, 0x04, 0x0f, 0x3c, 0xb8, 0xcc,
    0x7f, 0x05, 0x10, 0xb3, 0xdd, 0x7e, 0x07, 0xfe,
    0xfe, 0x28, 0x0a, 0xcd, 0x62, 0x04, 0x38, 0x05,
    0xb7, 0xc2, 0x92, 0x03, 0x4f, 0xdd, 0x71, 0x07,
    0x79, 0xc9, 0xcd, 0x6a, 0x05, 0xc8, 0xcd, 0x7f,
    0x05, 0xdd, 0x7e, 0x08, 0xfe, 0x03, 0xd0, 0x18,
    0x0a, 0xdd, 0x7e, 0x08, 0xfe, 0x03, 0xd0, 0xcd,
    0x6a, 0x05, 0xc8, 0xf5, 0xdd, 0x36, 0x08, 0x03,
    0xcd, 0x83, 0x05, 0xf1, 0xdd, 0x77, 0x08, 0xc3,
    0x7f, 0x05, 0x0e, 0xfb, 0xdd, 0xe5, 0xe1, 0x11,
    0x15, 0x00, 0x19, 0x46, 0x23, 0xcd, 0x9f, 0x06,
    0xcd, 0xac, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xdd,
    0x46, 0x0c, 0xdd, 0x5e, 0x0d, 0xcb, 0xbb, 0xdd,
    0x56, 0x03, 0x15, 0xdd, 0x6e, 0x0a, 0xdd, 0x66,
    0x0b, 0xe5, 0xfd, 0xe1, 0xdd, 0x6e, 0x05, 0xdd,
    0x66, 0x06, 0xc9, 0xcb, 0x7f, 0xc0, 0xdb, 0xfa,
    0xcb, 0x6f, 0x28, 0xf7, 0xd5, 0x11, 0x00, 0x00,
    0xfd, 0xe9, 0x79, 0x07, 0x5f, 0x16, 0x00, 0x21,
    0x0c, 0x0f, 0x19, 0x5e, 0x23, 0x56, 0xc5, 0xd5,
    0x11, 0xb0, 0x0b, 0xcd, 0xc3, 0x01, 0x3e, 0x41,
    0xdd, 0x86, 0x00, 0xcd, 0xcc, 0x01, 0x11, 0xae,
    0x0e, 0xcd, 0xc3, 0x01, 0xd1, 0xcd, 0xc3, 0x01,
    0x3e, 0xff, 0xdd, 0xbe, 0x07, 0x37, 0xc4, 0xa3,
    0x04, 0xc1, 0xc9, 0xcd, 0xc3, 0x01, 0xcd, 0xc9,
    0x04, 0xfe, 0x0d, 0x20, 0xf9, 0x11, 0xab, 0x0e,
    0xc3, 0xc3, 0x01, 0x11, 0xc7, 0x0b, 0xcd, 0xc3,
    0x01, 0xcd, 0xc9, 0x04, 0xe6, 0xdf, 0x5f, 0xfe,
    0x41, 0x37, 0x28, 0x08, 0xfe, 0x52, 0x28, 0x04,
    0xd6, 0x49, 0x20, 0xed, 0xf5, 0x7b, 0xcd, 0xcc,
    0x01, 0x11, 0xab, 0x0e, 0xcd, 0xc3, 0x01, 0xf1,
    0xc9, 0xc5, 0xe5, 0xfd, 0x6e, 0x18, 0xfd, 0x66,
    0x19, 0xcd, 0xdd, 0x01, 0xe1, 0xc1, 0xc9, 0xe6,
    0x20, 0x28, 0x36, 0xdb, 0xfa, 0xfe, 0xf0, 0x28,
    0x0b, 0x1b, 0x7b, 0xb2, 0x28, 0x2d, 0xdb, 0xfa,
    0xfe, 0xf0, 0x20, 0xeb, 0xed, 0xa2, 0xd1, 0xd5,
    0x7b, 0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb,
    0xfa, 0xe6, 0x20, 0x28, 0x14, 0xed, 0xa2, 0x20,
    0xf4, 0x1d, 0xf2, 0xf0, 0x04, 0xd1, 0x15, 0xd5,
    0xf2, 0xf0, 0x04, 0xfb, 0x76, 0xdb, 0xf7, 0xed,
    0xa2, 0xd1, 0xc9, 0xd1, 0xe1, 0xfd, 0xe1, 0xfd,
    0xe5, 0xc5, 0x0e, 0xf7, 0xfd, 0x7e, 0x12, 0x47,
    0xcb, 0xdf, 0xed, 0x79, 0xdb, 0xfa, 0xcb, 0x6f,
    0x20, 0xfa, 0xed, 0x41, 0xc1, 0xe9, 0xe6, 0x20,
    0x28, 0xdf, 0xdb, 0xfa, 0xfe, 0xb0, 0x28, 0x0b,
    0x1b, 0x7b, 0xb2, 0x28, 0xd6, 0xdb, 0xfa, 0xfe,
    0xb0, 0x20, 0xeb, 0xed, 0xa3, 0xd1, 0xd5, 0x7b,
    0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb, 0xfa,
    0xe6, 0x20, 0x28, 0xbd, 0xed, 0xa3, 0x20, 0xf4,
    0x1d, 0xf2, 0x47, 0x05, 0xd1, 0x15, 0xd5, 0xf2,
    0x47, 0x05, 0xfb, 0x76, 0xdb, 0xf7, 0xed, 0xa3,
    0xd1, 0xc9, 0x04, 0x15, 0xc0, 0x06, 0x01, 0xc9,
    0xfd, 0xcb, 0x0b, 0x4e, 0x20, 0x04, 0xfd, 0xcb,
    0x0b, 0x86, 0xfd, 0x36, 0x01, 0x00, 0xc9, 0x3e,
    0x00, 0x18, 0x02, 0x3e, 0x08, 0xc5, 0xd5, 0x4f,
    0xdd, 0x7e, 0x00, 0xf5, 0xcd, 0x42, 0x06, 0x7e,
    0xe6, 0x07, 0xcb, 0x57, 0x28, 0x01, 0x0f, 0x5f,
    0x23, 0xf1, 0xfd, 0xbe, 0x11, 0x28, 0x1b, 0xfd,
    0x77, 0x11, 0xcb, 0x7e, 0xc5, 0x28, 0x0f, 0xfd,
    0xbe, 0x13, 0xfd, 0x77, 0x13, 0xf5, 0xd5, 0xe5,
    0xc4, 0x2f, 0x06, 0xe1, 0xd1, 0xf1, 0xcd, 0xe1,
    0x06, 0xc1, 0xcb, 0x76, 0x28, 0x0f, 0x3e, 0x13,
    0xcb, 0x6e, 0x28, 0x02, 0x3e, 0x27, 0xdd, 0xbe,
    0x08, 0x30, 0x02, 0xcb, 0xd3, 0xdb, 0xf5, 0xe6,
    0x03, 0x57, 0xa3, 0xf5, 0x7e, 0xe6, 0x03, 0x47,
    0x04, 0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb2, 0xb3,
    0xd3, 0xf7, 0xfd, 0x77, 0x12, 0xcd, 0x53, 0x06,
    0xdd, 0x7e, 0x08, 0xcb, 0x59, 0x28, 0x0a, 0xb7,
    0x20, 0x04, 0xcb, 0x99, 0x18, 0x03, 0xba, 0x28,
    0x06, 0xcd, 0xbe, 0x06, 0xf1, 0x37, 0xf5, 0xf1,
    0xc5, 0xe5, 0xcd, 0x5b, 0x06, 0xe1, 0xc1, 0xcb,
    0x59, 0xcc, 0x0f, 0x06, 0xd1, 0xc1, 0xc9, 0xcd,
    0xac, 0x06, 0x3e, 0x04, 0xd3, 0xfb, 0xcd, 0xac,
    0x06, 0x3e, 0x03, 0xa6, 0xd3, 0xfb, 0xcd, 0xb5,
    0x06, 0xdb, 0xfb, 0xe6, 0x10, 0xc0, 0xcd, 0xbe,
    0x06, 0x3e, 0xff, 0xb7, 0x37, 0x18, 0x2c, 0x3c,
    0xcb, 0xf7, 0xfd, 0x5e, 0x0f, 0xfd, 0x56, 0x10,
    0x12, 0xfd, 0x5e, 0x0d, 0xfd, 0x56, 0x0e, 0xc3,
    0x93, 0x04, 0xfd, 0xe5, 0xe1, 0x11, 0x1a, 0x00,
    0x19, 0x57, 0x07, 0x07, 0x07, 0x82, 0x5f, 0x16,
    0x00, 0x19, 0xc9, 0xe5, 0x11, 0x07, 0x00, 0x19,
    0x56, 0xe1, 0xc9, 0x23, 0xfd, 0x46, 0x12, 0x0e,
    0xf7, 0x56, 0x1e, 0x00, 0x23, 0x30, 0x28, 0xed,
    0x5e, 0x3e, 0x00, 0xed, 0x47, 0x20, 0x0c, 0xfb,
    0x1b, 0x7a, 0xb3, 0x28, 0x08, 0x0e, 0xf7, 0xed,
    0x41, 0x18, 0xf5, 0x56, 0xfb, 0xed, 0x41, 0x18,
    0xfc, 0xed, 0x46, 0x33, 0x33, 0xcd, 0x0f, 0x07,
    0x7a, 0xbe, 0x30, 0x04, 0x56, 0x18, 0x01, 0xc0,
    0xed, 0x41, 0xed, 0x41, 0x00, 0x1b, 0x7a, 0xb3,
    0xc2, 0x90, 0x06, 0xc9, 0xcd, 0xf8, 0x06, 0xdb,
    0xfa, 0xe6, 0x0f, 0x20, 0xf7, 0xdb, 0xfa, 0xcb,
    0x67, 0x20, 0xf4, 0xc9, 0xdb, 0xfa, 0xe6, 0xc0,
    0xfe, 0x80, 0x20, 0xf8, 0xc9, 0xdb, 0xfa, 0xe6,
    0xc0, 0xfe, 0xc0, 0x20, 0xf8, 0xc9, 0xcd, 0xac,
    0x06, 0x3e, 0x07, 0xb1, 0xd3, 0xfb, 0xcd, 0xac,
    0x06, 0x3e, 0x03, 0xa6, 0xcb, 0x59, 0x28, 0x03,
    0xdd, 0xb6, 0x09, 0xd3, 0xfb, 0xcb, 0x59, 0xc8,
    0xcd, 0xac, 0x06, 0xdd, 0x7e, 0x08, 0xd3, 0xfb,
    0xc9, 0xe5, 0x23, 0x23, 0x23, 0xcd, 0xac, 0x06,
    0x3e, 0x03, 0xd3, 0xfb, 0x01, 0xfb, 0x02, 0xcd,
    0xac, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xe1, 0xc9,
    0xcd, 0xac, 0x06, 0x3e, 0x08, 0xd3, 0xfb, 0xcd,
    0xb5, 0x06, 0xdb, 0xfb, 0xe6, 0xc0, 0xfe, 0x80,
    0xc8, 0xcd, 0xb5, 0x06, 0xdb, 0xfb, 0xc9, 0xcd,
    0xf8, 0x06, 0xe5, 0xd5, 0x11, 0x05, 0x00, 0x19,
    0x77, 0xd1, 0xe1, 0xc9, 0x0e, 0x01, 0xdd, 0xcb,
    0x0f, 0x4e, 0xc0, 0x0c, 0xdd, 0xcb, 0x10, 0x4e,
    0xc0, 0xdd, 0xcb, 0x10, 0x66, 0xc0, 0x0c, 0xdd,
    0xcb, 0x10, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f,
    0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x7e, 0xc0,
    0xdd, 0xcb, 0x0f, 0x56, 0xc0, 0xdd, 0xcb, 0x0f,
    0x46, 0xc0, 0xdd, 0xcb, 0x10, 0x76, 0xc0, 0xdd,
    0xcb, 0x10, 0x46, 0xc0, 0x0c, 0xdd, 0xcb, 0x0e,
    0x5e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x66, 0xc0,
    0x0c, 0xdd, 0xcb, 0x0e, 0x66, 0xc0, 0x0c, 0xdd,
    0xcb, 0x0e, 0x7e, 0xc0, 0x0c, 0xc9, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0x13, 0x22, 0x24, 0xff,
    0xff, 0x11, 0x41, 0x0d, 0xcd, 0xc3, 0x01, 0xcd,
    0xc9, 0x04, 0xfe, 0x31, 0xfa, 0x07, 0x08, 0xfe,
    0x3a, 0xf2, 0x07, 0x08, 0xf5, 0xcd, 0xcc, 0x01,
    0x11, 0xab, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xd6,
    0x30, 0xfe, 0x04, 0xf2, 0x29, 0x08, 0x32, 0xfe,
    0xff, 0x3d, 0x07, 0x4f, 0xaf, 0x47, 0x21, 0x3b,
    0x08, 0x09, 0x5e, 0x23, 0x56, 0xeb, 0xcd, 0xdd,
    0x01, 0x18, 0xc6, 0x4d, 0x08, 0x4d, 0x08, 0x4d,
    0x08, 0xa3, 0x08, 0xcd, 0x08, 0x21, 0x09, 0xc9,
    0x09, 0x1a, 0x0a, 0x3d, 0x0a, 0x3e, 0x20, 0x32,
    0xfd, 0xff, 0x3e, 0x5f, 0x47, 0x3a, 0xfd, 0xff,
    0xcd, 0x80, 0x08, 0x05, 0x28, 0x08, 0x3c, 0xf2,
    0x58, 0x08, 0x3e, 0x20, 0x18, 0xf2, 0xcd, 0x9e,
    0x08, 0xc0, 0x3e, 0x0d, 0xcd, 0x80, 0x08, 0x3e,
    0x0a, 0xcd, 0x80, 0x08, 0x3a, 0xfd, 0xff, 0x3c,
    0xfa, 0x4d, 0x08, 0x32, 0xfd, 0xff, 0x18, 0xd2,
    0xf5, 0xc5, 0x4f, 0x3a, 0xfe, 0xff, 0xfe, 0x01,
    0x20, 0x05, 0xcd, 0x75, 0x01, 0x18, 0x0c, 0xfe,
    0x02, 0x20, 0x05, 0xcd, 0x71, 0x01, 0x18, 0x03,
    0xcd, 0x98, 0x01, 0xc1, 0xf1, 0xc9, 0xdb, 0xfd,
    0xcb, 0x4f, 0xc9, 0xdb, 0xfe, 0xaf, 0x57, 0x4f,
    0xcd, 0x71, 0x01, 0xcd, 0x85, 0x01, 0xba, 0x20,
    0x0f, 0xcd, 0x9e, 0x08, 0x20, 0x05, 0x7a, 0x3c,
    0xf2, 0xa6, 0x08, 0x11, 0x49, 0x0e, 0x18, 0x03,
    0x11, 0x3f, 0x0e, 0xcd, 0xc3, 0x01, 0x11, 0x34,
    0x0e, 0xcd, 0xc3, 0x01, 0xc9, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0xcd, 0xee, 0x08, 0x21, 0x00,
    0x00, 0x01, 0xff, 0xfb, 0xcd, 0x2a, 0xfc, 0xb7,
    0x28, 0x03, 0xcd, 0xf6, 0x08, 0xcd, 0xfe, 0x08,
    0xcd, 0x9e, 0x08, 0x28, 0xe9, 0xc9, 0xaf, 0x32,
    0xfe, 0xff, 0x32, 0xfd, 0xff, 0xc9, 0x3a, 0xfd,
    0xff, 0x3c, 0x32, 0xfd, 0xff, 0xc9, 0x11, 0x15,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfe, 0xff, 0x3c,
    0x32, 0xfe, 0xff, 0xcd, 0xb3, 0xfc, 0x11, 0xae,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfd, 0xff, 0xcd,
    0xb3, 0xfc, 0x11, 0x24, 0x0e, 0xcd, 0xc3, 0x01,
    0xc9, 0xcd, 0x3e, 0x09, 0xdd, 0x36, 0x01, 0x27,
    0xdd, 0x36, 0x03, 0x05, 0xcd, 0x74, 0x09, 0xcd,
    0xee, 0x08, 0xcd, 0x9b, 0x09, 0xcd, 0xac, 0x09,
    0xcd, 0x9e, 0x08, 0x28, 0xf5, 0xc9, 0xcd, 0x5d,
    0x01, 0x11, 0x53, 0x0e, 0xcd, 0xc3, 0x01, 0xcd,
    0xc9, 0x04, 0xe6, 0xdf, 0xd6, 0x41, 0x38, 0xf7,
    0xfe, 0x04, 0x30, 0xf3, 0xdd, 0x77, 0x00, 0xf5,
    0x11, 0x6e, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xc6,
    0x41, 0xcd, 0xcc, 0x01, 0x11, 0xde, 0x0c, 0xcd,
    0xc3, 0x01, 0xcd, 0xc9, 0x04, 0x11, 0xab, 0x0e,
    0xcd, 0xc3, 0x01, 0xc9, 0x01, 0x5f, 0xaa, 0x21,
    0x00, 0x80, 0xe5, 0x11, 0x02, 0x80, 0x71, 0x23,
    0x70, 0x2b, 0x01, 0x00, 0x08, 0xed, 0xb0, 0x01,
    0xb6, 0x6d, 0x71, 0x23, 0x70, 0x2b, 0x01, 0x00,
    0x0c, 0xed, 0xb0, 0xc1, 0xdd, 0x71, 0x05, 0xdd,
    0x70, 0x06, 0xc9, 0x11, 0x96, 0x0e, 0xcd, 0xc3,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x0e, 0x03,
    0xcd, 0xc0, 0x09, 0xc9, 0x11, 0xa3, 0x0e, 0xcd,
    0xc3, 0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01,
    0x03, 0xcd, 0xc0, 0x09, 0xcd, 0xfe, 0x08, 0xc9,
    0xdd, 0x7e, 0x07, 0xfe, 0x00, 0xc4, 0xf6, 0x08,
    0xc9, 0xcd, 0x3e, 0x09, 0x06, 0x00, 0x0e, 0x27,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x03, 0x01, 0xcd, 0xee, 0x08, 0xc5,
    0xcd, 0xfd, 0x09, 0xc1, 0xcd, 0xed, 0x09, 0xcd,
    0x9e, 0x08, 0x28, 0xf3, 0xc9, 0x04, 0x0d, 0xfa,
    0xf3, 0x09, 0xc9, 0x78, 0x41, 0x4f, 0xc5, 0xcd,
    0xfe, 0x08, 0xc1, 0x18, 0xf0, 0xc5, 0xdd, 0x70,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01, 0x03,
    0xcd, 0xc0, 0x09, 0xc1, 0xdd, 0x71, 0x01, 0xdd,
    0x36, 0x07, 0xff, 0xcd, 0x01, 0x03, 0xcd, 0xc0,
    0x09, 0xc9, 0xcd, 0x5d, 0x01, 0xaf, 0xdd, 0x77,
    0x00, 0xdd, 0x77, 0x01, 0xdd, 0x36, 0x03, 0x01,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x07, 0xfe, 0xcd, 0x01, 0x03, 0xcd,
    0x9e, 0x08, 0x28, 0xf4, 0xc9, 0xf1, 0xc9, 0xdb,
    0xf6, 0x3a, 0x00, 0x00, 0xfe, 0xc3, 0xd3, 0xf6,
    0x20, 0x03, 0xc3, 0x47, 0x00, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0x21, 0x00, 0x00, 0x01, 0xff,
    0xfb, 0xcd, 0x2a, 0xfc, 0xb7, 0xc2, 0xd4, 0x00,
    0x11, 0xa9, 0x0c, 0xcd, 0xc3, 0x01, 0xc3, 0x47,
    0x00, 0xdb, 0xf6, 0x22, 0x00, 0xfd, 0x21, 0xd2,
    0xfc, 0x56, 0x23, 0xcb, 0x7e, 0x20, 0x18, 0x5e,
    0xcb, 0x73, 0xcb, 0xb3, 0x23, 0xe5, 0x28, 0x05,
    0xcd, 0x54, 0xfc, 0x18, 0x07, 0xdd, 0x21, 0x74,
    0xfc, 0xcd, 0x58, 0xfc, 0xe1, 0x18, 0xe2, 0xaf,
    0xd3, 0xf6, 0xc9, 0xdd, 0x21, 0x76, 0xfc, 0x2a,
    0x00, 0xfd, 0x7b, 0x85, 0x6f, 0x7c, 0xce, 0x00,
    0x67, 0xcd, 0x72, 0xfc, 0x23, 0x23, 0x23, 0x78,
    0xbc, 0xd8, 0x20, 0xf5, 0x79, 0xbd, 0xd8, 0x18,
    0xf0, 0xdd, 0xe9, 0x72, 0xc9, 0x7e, 0xba, 0x20,
    0x01, 0xc9, 0xd3, 0xf6, 0xdb, 0xf5, 0xcb, 0x6f,
    0xcc, 0x8a, 0xfc, 0xf1, 0xf1, 0xf1, 0x3e, 0xff,
    0xc9, 0xd5, 0x11, 0x1a, 0x0d, 0xcd, 0xc3, 0x01,
    0xdb, 0xf6, 0x7e, 0xd3, 0xf6, 0xcd, 0xb3, 0xfc,
    0x11, 0x24, 0x0d, 0xcd, 0xc3, 0x01, 0xd1, 0x7a,
    0xcd, 0xb3, 0xfc, 0x11, 0x2f, 0x0d, 0xcd, 0xc3,
    0x01, 0x7c, 0xcd, 0xb3, 0xfc, 0x7d, 0xcd, 0xb3,
    0xfc, 0xc9, 0xf5, 0x0f, 0x0f, 0x0f, 0x0f, 0xe6,
    0x0f, 0xcd, 0xc4, 0xfc, 0xf1, 0xe6, 0x0f, 0xcd,
    0xc4, 0xfc, 0xc9, 0xfe, 0x0a, 0xfa, 0xcb, 0xfc,
    0xc6, 0x07, 0xc6, 0x30, 0x4f, 0xcd, 0xcc, 0x01,
    0xc9, 0xff, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00,
    0x41, 0xff, 0x42, 0xff, 0x40, 0x00, 0x00, 0xff,
    0x01, 0x00, 0x02, 0x00, 0x42, 0x00, 0x40, 0xff,
    0x41, 0xaa, 0x00, 0x55, 0x02, 0xaa, 0x01, 0xaa,
    0x41, 0x55, 0x01, 0xaa, 0x40, 0x55, 0x00, 0x55,
    0x42, 0x55, 0x41, 0x55, 0x40, 0x00, 0x80, 0x57,
    0x72, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x72, 0x61,
    0x63, 0x6b, 0xae, 0x00, 0x57, 0x72, 0x69, 0x74,
    0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63,
    0x74, 0x65, 0x64, 0xae, 0x00, 0x44, 0x61, 0x74,
    0x61, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae,
    0x00, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75,
    0x6e, 0x64, 0xae, 0x00, 0x4c, 0x6f, 0x73, 0x74,
    0x20, 0x64, 0x61, 0x74, 0x61, 0xae, 0x00, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74,
    0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0xae, 0x00,
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
    0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xae,
    0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae, 0x00,
    0x0d, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x20, 0x65,
    0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20,
    0x64, 0x72, 0x69, 0x76, 0x65, 0xa0, 0x00, 0x0d,
    0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x52, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x41, 0x20,
    0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74,
    0x2c, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x20, 0x74,
    0x6f, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
    0x3a, 0xa0, 0x00, 0x0a, 0x45, 0x72, 0x72, 0x6f,
    0x72, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x50, 0x2f,
    0x4d, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x2e, 0x00, 0x0d, 0x0a, 0x50, 0x75, 0x73,
    0x68, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2e, 0xa0, 0x00, 0x0d,
    0x4d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x44, 0x65,
    0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2d,
    0x2d, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x52, 0x65,
    0x76, 0x2e, 0x20, 0x32, 0x2e, 0x34, 0x0d, 0x0a,
    0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
    0x74, 0x20, 0x31, 0x39, 0x38, 0x32, 0x2c, 0x20,
    0x31, 0x39, 0x38, 0x33, 0x20, 0x4d, 0x6f, 0x72,
    0x72, 0x6f, 0x77, 0x20, 0x44, 0x65, 0x73, 0x69,
    0x67, 0x6e, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63,
    0x2e, 0x0d, 0x0a, 0x0a, 0x00, 0x54, 0x65, 0x73,
    0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x2d, 0x2d, 0x20, 0x70,
    0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x73, 0x74,
    0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x3a, 0x20,
    0x00, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20,
    0x4f, 0x2e, 0x4b, 0x2e, 0x0d, 0x0a, 0x0a, 0x00,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x43,
    0x50, 0x2f, 0x4d, 0x20, 0x73, 0x79, 0x73, 0x74,
    0x65, 0x6d, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x41, 0x20, 0x61,
    0x6e, 0x64, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73,
    0x20, 0x5b, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e,
    0x5d, 0x20, 0x07, 0x00, 0x07, 0x07, 0x52, 0x4f,
    0x4d, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x07,
    0x07, 0x52, 0x41, 0x4d, 0x20, 0x4d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x65, 0x72, 0x72, 0x6f,
    0x72, 0x00, 0x07, 0x07, 0x0d, 0x0a, 0x52, 0x65,
    0x61, 0x64, 0x20, 0x00, 0x20, 0x65, 0x78, 0x70,
    0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x00, 0x20,
    0x61, 0x74, 0x20, 0x52, 0x41, 0x4d, 0x20, 0x6c,
    0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
    0x00, 0x0d, 0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e,
    0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x20, 0x4d,
    0x65, 0x6e, 0x75, 0x0d, 0x0a, 0x0a, 0x31, 0x29,
    0x20, 0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x5c, 0x0d, 0x0a, 0x32, 0x29, 0x20, 0x50,
    0x6f, 0x72, 0x74, 0x20, 0x32, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x3e, 0x20, 0x42, 0x61, 0x72, 0x62, 0x65, 0x72,
    0x2d, 0x50, 0x6f, 0x6c, 0x65, 0x20, 0x70, 0x61,
    0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x74, 0x65,
    0x73, 0x74, 0x0d, 0x0a, 0x33, 0x29, 0x20, 0x43,
    0x65, 0x6e, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63,
    0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x2f,
    0x0d, 0x0a, 0x34, 0x29, 0x20, 0x4c, 0x6f, 0x6f,
    0x70, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6f,
    0x6e, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x32,
    0x0d, 0x0a, 0x35, 0x29, 0x20, 0x52, 0x41, 0x4d,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x0d, 0x0a, 0x36,
    0x29, 0x20, 0x46, 0x44, 0x43, 0x20, 0x52, 0x2f,
    0x57, 0x0d, 0x0a, 0x37, 0x29, 0x20, 0x46, 0x44,
    0x43, 0x20, 0x73, 0x65, 0x65, 0x6b, 0x20, 0x74,
    0x65, 0x73, 0x74, 0x0d, 0x0a, 0x38, 0x29, 0x20,
    0x56, 0x46, 0x4f, 0x20, 0x74, 0x65, 0x73, 0x74,
    0x0d, 0x0a, 0x39, 0x29, 0x20, 0x42, 0x6f, 0x6f,
    0x74, 0x0d, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x65,
    0x72, 0x20, 0x23, 0x3a, 0x00, 0x0d, 0x0a, 0x45,
    0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61,
    0x73, 0x73, 0x20, 0x00, 0x20, 0x65, 0x72, 0x72,
    0x6f, 0x72, 0x73, 0x20, 0x73, 0x6f, 0x20, 0x66,
    0x61, 0x72, 0x2e, 0x00, 0x6c, 0x6f, 0x6f, 0x70,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x00, 0x0d,
    0x0a, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20,
    0x00, 0x0d, 0x0a, 0x50, 0x61, 0x73, 0x73, 0x65,
    0x64, 0x20, 0x00, 0x45, 0x6e, 0x74, 0x65, 0x72,
    0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x20, 0x74,
    0x6f, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x28,
    0x41, 0x2d, 0x44, 0x29, 0x3a, 0x00, 0x0d, 0x0a,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61,
    0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74,
    0x65, 0x64, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x64,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x00, 0x0d, 0x0a,
    0x57, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x2e,
    0x2e, 0x2e, 0x00, 0x72, 0x65, 0x61, 0x64, 0x69,
    0x6e, 0x67, 0x00, 0x0d, 0x0a, 0x00, 0x3a, 0xa0,
    0x00, 0x00, 0x00, 0x01, 0x01, 0x14, 0x00, 0xfe,
    0x00, 0x00, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46,
    0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0x1c, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x75, 0x01,
    0x89, 0x01, 0x01, 0xd8, 0x58, 0x05, 0x6f, 0x03,
    0x05, 0x1c, 0xff, 0x02, 0x59, 0x58, 0x05, 0x6f,
    0x03, 0x05, 0x1c, 0xff, 0x04, 0x5a, 0x58, 0x05,
    0x6f, 0x03, 0x05, 0x1c, 0xff, 0x04, 0x5b, 0x58,
    0x05, 0x6f, 0x03, 0x05, 0x1c, 0xff, 0x4c, 0x0b,
    0x3f, 0x0b, 0x5d, 0x0b, 0x5d, 0x0b, 0x69, 0x0b,
    0x7f, 0x0b, 0x74, 0x0b, 0x7f, 0x0b, 0x90, 0x0b,
    0xa1, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    };

/* MD3 2.5 ROM is 4096 bytes */
static uint8 mmd_rom_25[MMD_ROM_SIZE] = {
    0xc3, 0x26, 0x00, 0xc3, 0xc3, 0x01, 0xc3, 0x89,
    0x05, 0xc3, 0x01, 0x03, 0xc3, 0x0e, 0x03, 0xc3,
    0x92, 0x03, 0xc3, 0xff, 0x04, 0xc3, 0x56, 0x05,
    0xc3, 0x57, 0x01, 0xb1, 0x0e, 0xc3, 0x98, 0x01,
    0xc3, 0xde, 0x01, 0xc3, 0xf1, 0x01, 0xed, 0x46,
    0x31, 0x00, 0x00, 0xfd, 0x21, 0xd0, 0x0e, 0xcd,
    0x85, 0x00, 0xcd, 0x53, 0x00, 0x11, 0x37, 0x0c,
    0xcd, 0xba, 0x01, 0xcd, 0xaa, 0x00, 0xcd, 0xe9,
    0x00, 0xcd, 0xca, 0x00, 0xcd, 0x00, 0xfc, 0xdb,
    0xfc, 0xdb, 0xf5, 0xcb, 0x6f, 0xcc, 0x01, 0x08,
    0xc3, 0x03, 0x01, 0x3e, 0x80, 0xd3, 0xfd, 0xd3,
    0xff, 0xd3, 0xfd, 0xd3, 0xff, 0x3e, 0x40, 0xd3,
    0xfd, 0xd3, 0xff, 0x3e, 0xce, 0xd3, 0xfd, 0xd3,
    0xff, 0x3e, 0x37, 0xd3, 0xfd, 0xd3, 0xff, 0xc9,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a,
    0x06, 0x9b, 0x9e, 0x3f, 0x0a, 0x3e, 0x3e, 0xd3,
    0xf3, 0x3e, 0xff, 0xd3, 0xf0, 0x3e, 0xff, 0xd3,
    0xf0, 0x3e, 0x7e, 0xd3, 0xf3, 0x3e, 0x0d, 0xd3,
    0xf1, 0x3e, 0x00, 0xd3, 0xf1, 0x3e, 0xbe, 0xd3,
    0xf3, 0x3e, 0x68, 0xd3, 0xf2, 0x3e, 0x00, 0xd3,
    0xf2, 0xc9, 0x21, 0x00, 0x00, 0x01, 0xfd, 0x0f,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0xf4, 0x0c, 0xcd,
    0xc3, 0x01, 0x18, 0x00, 0xdb, 0xf5, 0xcb, 0x6f,
    0xca, 0x47, 0x00, 0x11, 0x1b, 0x0c, 0xcd, 0xc3,
    0x01, 0x76, 0x21, 0x00, 0xfc, 0x01, 0xf8, 0x03,
    0xcd, 0xdc, 0x00, 0xc8, 0x11, 0x07, 0x0d, 0xcd,
    0xc3, 0x01, 0x18, 0xe0, 0xaf, 0xf5, 0xf1, 0xae,
    0x23, 0x0b, 0xf5, 0x78, 0xb1, 0x20, 0xf7, 0xf1,
    0xc9, 0x21, 0x3f, 0x0a, 0x11, 0x00, 0xfc, 0x01,
    0x00, 0x01, 0xed, 0xb0, 0x01, 0xf7, 0x02, 0xd5,
    0xe1, 0x13, 0x36, 0xff, 0xed, 0xb0, 0x3a, 0x82,
    0x00, 0x77, 0xc9, 0xcd, 0x5d, 0x01, 0x3a, 0xea,
    0x0e, 0xe6, 0x03, 0xcb, 0x57, 0x28, 0x01, 0x0f,
    0x4f, 0x3a, 0xeb, 0x0e, 0xe6, 0x03, 0x47, 0x04,
    0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb1, 0x11, 0x00,
    0x60, 0xd3, 0xf7, 0x1b, 0x7a, 0xb3, 0x28, 0x13,
    0xdb, 0xf5, 0xcb, 0x57, 0x28, 0xf5, 0x1b, 0x7a,
    0xb3, 0x28, 0x08, 0xdb, 0xf5, 0xcb, 0x57, 0x20,
    0xf5, 0x18, 0x0f, 0x11, 0xb8, 0x0c, 0xcd, 0xc3,
    0x01, 0xcd, 0xe2, 0x04, 0x11, 0xab, 0x0e, 0xcd,
    0xc3, 0x01, 0xcd, 0x98, 0x05, 0xcd, 0x92, 0x03,
    0xdd, 0x7e, 0x07, 0xb7, 0xca, 0x00, 0xfe, 0x11,
    0xfb, 0x0b, 0xc3, 0xbc, 0x00, 0x21, 0xb1, 0x0e,
    0x11, 0x00, 0xff, 0x01, 0x5d, 0x00, 0xed, 0xb0,
    0xdd, 0x21, 0x00, 0xff, 0xfd, 0x21, 0x1f, 0xff,
    0xc9, 0x06, 0xff, 0x18, 0x02, 0x06, 0xfd, 0x78,
    0x41, 0x4f, 0xed, 0x78, 0xcb, 0x47, 0x28, 0xfa,
    0x78, 0x0d, 0xed, 0x79, 0xc9, 0x06, 0xff, 0x18,
    0x02, 0x06, 0xfd, 0x48, 0xed, 0x78, 0xcb, 0x4f,
    0x28, 0xfa, 0x0d, 0xed, 0x78, 0xe6, 0x7f, 0xc9,
    0xdb, 0xf5, 0xcb, 0x67, 0x20, 0xfa, 0x79, 0xd3,
    0xf4, 0x3e, 0x80, 0xd3, 0xf5, 0xaf, 0xd3, 0xf5,
    0x21, 0x40, 0x00, 0xdb, 0xf5, 0xcb, 0x5f, 0x28,
    0x07, 0x2b, 0x7d, 0xb4, 0x20, 0xf5, 0x3d, 0xc9,
    0xaf, 0xc9, 0x06, 0x32, 0x3e, 0x0a, 0xcd, 0xcc,
    0x01, 0x10, 0xf9, 0x1a, 0xb7, 0xc8, 0xcd, 0xcc,
    0x01, 0x13, 0x18, 0xf7, 0x4f, 0xc5, 0xd5, 0xe5,
    0xfd, 0x6e, 0x16, 0xfd, 0x66, 0x17, 0xcd, 0xdd,
    0x01, 0xe1, 0xd1, 0xc1, 0xc9, 0xe9, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xde, 0xfd, 0xcb,
    0x0b, 0xd6, 0xfd, 0x36, 0x0a, 0x02, 0xc3, 0x56,
    0x02, 0xfd, 0xcb, 0x0b, 0x9e, 0xfd, 0x71, 0x0a,
    0x79, 0xfe, 0x02, 0x20, 0x18, 0xfd, 0x7e, 0x08,
    0xfd, 0x77, 0x04, 0xfd, 0x7e, 0x00, 0xfd, 0x77,
    0x05, 0xfd, 0x7e, 0x01, 0xfd, 0x77, 0x06, 0xfd,
    0x7e, 0x02, 0xfd, 0x77, 0x07, 0xfd, 0x7e, 0x04,
    0xb7, 0x28, 0x33, 0xfd, 0x35, 0x04, 0xfd, 0x7e,
    0x00, 0xfd, 0xbe, 0x05, 0x20, 0x28, 0xfd, 0x7e,
    0x01, 0xfd, 0xbe, 0x06, 0x20, 0x20, 0xfd, 0x7e,
    0x02, 0xfd, 0xbe, 0x07, 0x20, 0x18, 0xfd, 0x34,
    0x07, 0xfd, 0x7e, 0x09, 0xfd, 0xbe, 0x07, 0x30,
    0x07, 0xfd, 0x34, 0x06, 0xfd, 0x36, 0x07, 0x01,
    0xfd, 0xcb, 0x0b, 0x96, 0x18, 0x08, 0xfd, 0x36,
    0x04, 0x00, 0xfd, 0xcb, 0x0b, 0xd6, 0xdd, 0x36,
    0x07, 0x00, 0xfd, 0x7e, 0x00, 0xcd, 0x5b, 0x06,
    0x23, 0x7e, 0xfd, 0x5e, 0x02, 0x1d, 0x53, 0xe6,
    0x18, 0x06, 0x00, 0xfe, 0x00, 0x28, 0x14, 0x06,
    0x01, 0xfe, 0x08, 0x28, 0x0c, 0x06, 0x03, 0xfe,
    0x10, 0x28, 0x04, 0x06, 0x07, 0xcb, 0x2b, 0xcb,
    0x2b, 0xcb, 0x2b, 0x1c, 0xfd, 0x73, 0x03, 0x78,
    0xa2, 0xfd, 0x77, 0x0c, 0xfd, 0xcb, 0x0b, 0x46,
    0xfd, 0xcb, 0x0b, 0xc6, 0x28, 0x22, 0xfd, 0x7e,
    0x00, 0xdd, 0xbe, 0x00, 0x20, 0x10, 0xfd, 0x7e,
    0x01, 0xdd, 0xbe, 0x01, 0x20, 0x08, 0xfd, 0x7e,
    0x03, 0xdd, 0xbe, 0x02, 0x28, 0x2a, 0xaf, 0xfd,
    0xcb, 0x0b, 0x4e, 0xc4, 0x0e, 0x03, 0xb7, 0xc0,
    0xfd, 0x7e, 0x00, 0xdd, 0x77, 0x00, 0xfd, 0x7e,
    0x01, 0xdd, 0x77, 0x01, 0xfd, 0x7e, 0x03, 0xdd,
    0x77, 0x02, 0xaf, 0xfd, 0xcb, 0x0b, 0x56, 0xc4,
    0x01, 0x03, 0xb7, 0xc0, 0xfd, 0xcb, 0x0b, 0x8e,
    0xfd, 0x6e, 0x0c, 0x26, 0x00, 0x29, 0x29, 0x29,
    0x29, 0x29, 0x29, 0x29, 0xdd, 0x5e, 0x05, 0xdd,
    0x56, 0x06, 0x19, 0xfd, 0x5e, 0x14, 0xfd, 0x56,
    0x15, 0x01, 0x80, 0x00, 0xfd, 0xcb, 0x0b, 0x5e,
    0x3e, 0x00, 0xc0, 0xfd, 0xcb, 0x0b, 0xce, 0xeb,
    0xc9, 0x21, 0xff, 0x04, 0xdd, 0x75, 0x0a, 0xdd,
    0x74, 0x0b, 0x0e, 0x06, 0x18, 0x0b, 0x21, 0x56,
    0x05, 0xdd, 0x75, 0x0a, 0xdd, 0x74, 0x0b, 0x0e,
    0x05, 0xdd, 0x7e, 0x00, 0xcd, 0x5b, 0x06, 0x23,
    0x7e, 0xe6, 0x40, 0xb1, 0xdd, 0x77, 0x16, 0xdd,
    0x36, 0x15, 0x09, 0x3e, 0x18, 0xa6, 0x0f, 0x0f,
    0x0f, 0xdd, 0x77, 0x1b, 0x06, 0x80, 0x11, 0x80,
    0x00, 0xfe, 0x00, 0x28, 0x11, 0x06, 0xff, 0x11,
    0x00, 0x00, 0xfe, 0x01, 0x28, 0x08, 0x16, 0x01,
    0xfe, 0x02, 0x28, 0x02, 0x16, 0x03, 0xdd, 0x70,
    0x1e, 0xdd, 0xcb, 0x0d, 0x7e, 0x20, 0x06, 0xdd,
    0x73, 0x0c, 0xdd, 0x72, 0x0d, 0xaf, 0xcb, 0x56,
    0xdd, 0x46, 0x01, 0xdd, 0x4e, 0x02, 0x28, 0x03,
    0xcb, 0x18, 0x17, 0xdd, 0x77, 0x19, 0x07, 0x07,
    0xdd, 0x77, 0x09, 0xdd, 0x70, 0x08, 0xdd, 0x70,
    0x18, 0xdd, 0x71, 0x1a, 0x3e, 0x03, 0xa6, 0xdd,
    0xb6, 0x09, 0xdd, 0x77, 0x17, 0x11, 0x05, 0x00,
    0x19, 0x7e, 0xdd, 0x77, 0x1c, 0x23, 0x7e, 0xdd,
    0x77, 0x1d, 0xdd, 0x46, 0x04, 0x16, 0x03, 0xc5,
    0xd5, 0xcd, 0x9c, 0x05, 0xfd, 0xe5, 0xcd, 0x3b,
    0x04, 0xcd, 0x6f, 0x04, 0xfd, 0xe1, 0x06, 0x07,
    0xdd, 0xe5, 0xe1, 0x11, 0x0e, 0x00, 0x19, 0xcd,
    0xce, 0x06, 0xed, 0xa2, 0x20, 0xf9, 0xd1, 0xc1,
    0xdd, 0x7e, 0x0e, 0xe6, 0xc0, 0x28, 0x35, 0xcd,
    0x35, 0x07, 0x3e, 0x01, 0xb9, 0x28, 0x1d, 0x3e,
    0x06, 0xb9, 0xcc, 0x22, 0x04, 0x3e, 0x02, 0xb9,
    0xcc, 0xfa, 0x03, 0x3e, 0x05, 0xb9, 0xcc, 0x09,
    0x04, 0xdd, 0x7e, 0x04, 0x0f, 0x3c, 0xb8, 0xcc,
    0x98, 0x05, 0x10, 0xb3, 0xdd, 0x7e, 0x07, 0xfe,
    0xfe, 0x28, 0x0a, 0xcd, 0x7b, 0x04, 0x38, 0x05,
    0xb7, 0xc2, 0x92, 0x03, 0x4f, 0xdd, 0x71, 0x07,
    0x79, 0xc9, 0xcd, 0x83, 0x05, 0xc8, 0xcd, 0x98,
    0x05, 0xdd, 0x7e, 0x08, 0xfe, 0x03, 0xd0, 0x18,
    0x0a, 0xdd, 0x7e, 0x08, 0xfe, 0x03, 0xd0, 0xcd,
    0x83, 0x05, 0xc8, 0xf5, 0xdd, 0x36, 0x08, 0x03,
    0xcd, 0x9c, 0x05, 0xf1, 0xdd, 0x77, 0x08, 0xc3,
    0x98, 0x05, 0xcd, 0x83, 0x05, 0xc8, 0xcd, 0x98,
    0x05, 0xdd, 0x7e, 0x08, 0xf5, 0xdd, 0x36, 0x08,
    0x0a, 0xcd, 0x9c, 0x05, 0xf1, 0xdd, 0x77, 0x08,
    0xc3, 0x9c, 0x05, 0x0e, 0xfb, 0xdd, 0xe5, 0xe1,
    0x11, 0x15, 0x00, 0x19, 0x46, 0x23, 0xcd, 0xb8,
    0x06, 0xcd, 0xc5, 0x06, 0xed, 0xa3, 0x20, 0xf9,
    0xdd, 0x46, 0x0c, 0xdd, 0x5e, 0x0d, 0xcb, 0xbb,
    0xdd, 0x56, 0x03, 0x15, 0xdd, 0x6e, 0x0a, 0xdd,
    0x66, 0x0b, 0xe5, 0xfd, 0xe1, 0xdd, 0x6e, 0x05,
    0xdd, 0x66, 0x06, 0xc9, 0xcb, 0x7f, 0xc0, 0xdb,
    0xfa, 0xcb, 0x6f, 0x28, 0xf7, 0xd5, 0x11, 0x00,
    0x00, 0xfd, 0xe9, 0x79, 0x07, 0x5f, 0x16, 0x00,
    0x21, 0x0c, 0x0f, 0x19, 0x5e, 0x23, 0x56, 0xc5,
    0xd5, 0x11, 0xb0, 0x0b, 0xcd, 0xc3, 0x01, 0x3e,
    0x41, 0xdd, 0x86, 0x00, 0xcd, 0xcc, 0x01, 0x11,
    0xae, 0x0e, 0xcd, 0xc3, 0x01, 0xd1, 0xcd, 0xc3,
    0x01, 0x3e, 0xff, 0xdd, 0xbe, 0x07, 0x37, 0xc4,
    0xbc, 0x04, 0xc1, 0xc9, 0xcd, 0xc3, 0x01, 0xcd,
    0xe2, 0x04, 0xfe, 0x0d, 0x20, 0xf9, 0x11, 0xab,
    0x0e, 0xc3, 0xc3, 0x01, 0x11, 0xc7, 0x0b, 0xcd,
    0xc3, 0x01, 0xcd, 0xe2, 0x04, 0xe6, 0xdf, 0x5f,
    0xfe, 0x41, 0x37, 0x28, 0x08, 0xfe, 0x52, 0x28,
    0x04, 0xd6, 0x49, 0x20, 0xed, 0xf5, 0x7b, 0xcd,
    0xcc, 0x01, 0x11, 0xab, 0x0e, 0xcd, 0xc3, 0x01,
    0xf1, 0xc9, 0xc5, 0xe5, 0xfd, 0x6e, 0x18, 0xfd,
    0x66, 0x19, 0xcd, 0xdd, 0x01, 0xe1, 0xc1, 0xc9,
    0xe6, 0x20, 0x28, 0x36, 0xdb, 0xfa, 0xfe, 0xf0,
    0x28, 0x0b, 0x1b, 0x7b, 0xb2, 0x28, 0x2d, 0xdb,
    0xfa, 0xfe, 0xf0, 0x20, 0xeb, 0xed, 0xa2, 0xd1,
    0xd5, 0x7b, 0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76,
    0xdb, 0xfa, 0xe6, 0x20, 0x28, 0x14, 0xed, 0xa2,
    0x20, 0xf4, 0x1d, 0xf2, 0x09, 0x05, 0xd1, 0x15,
    0xd5, 0xf2, 0x09, 0x05, 0xfb, 0x76, 0xdb, 0xf7,
    0xed, 0xa2, 0xd1, 0xc9, 0xd1, 0xe1, 0xfd, 0xe1,
    0xfd, 0xe5, 0xc5, 0x0e, 0xf7, 0xfd, 0x7e, 0x12,
    0x47, 0xcb, 0xdf, 0xed, 0x79, 0xdb, 0xfa, 0xcb,
    0x6f, 0x20, 0xfa, 0xed, 0x41, 0xc1, 0xe9, 0xe6,
    0x20, 0x28, 0xdf, 0xdb, 0xfa, 0xfe, 0xb0, 0x28,
    0x0b, 0x1b, 0x7b, 0xb2, 0x28, 0xd6, 0xdb, 0xfa,
    0xfe, 0xb0, 0x20, 0xeb, 0xed, 0xa3, 0xd1, 0xd5,
    0x7b, 0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb,
    0xfa, 0xe6, 0x20, 0x28, 0xbd, 0xed, 0xa3, 0x20,
    0xf4, 0x1d, 0xf2, 0x60, 0x05, 0xd1, 0x15, 0xd5,
    0xf2, 0x60, 0x05, 0xfb, 0x76, 0xdb, 0xf7, 0xed,
    0xa3, 0xd1, 0xc9, 0x04, 0x15, 0xc0, 0x06, 0x01,
    0xc9, 0xfd, 0xcb, 0x0b, 0x4e, 0x20, 0x04, 0xfd,
    0xcb, 0x0b, 0x86, 0xfd, 0x36, 0x01, 0x00, 0xc9,
    0x3e, 0x00, 0x18, 0x02, 0x3e, 0x08, 0xc5, 0xd5,
    0x4f, 0xdd, 0x7e, 0x00, 0xf5, 0xcd, 0x5b, 0x06,
    0x7e, 0xe6, 0x07, 0xcb, 0x57, 0x28, 0x01, 0x0f,
    0x5f, 0x23, 0xf1, 0xfd, 0xbe, 0x11, 0x28, 0x1b,
    0xfd, 0x77, 0x11, 0xcb, 0x7e, 0xc5, 0x28, 0x0f,
    0xfd, 0xbe, 0x13, 0xfd, 0x77, 0x13, 0xf5, 0xd5,
    0xe5, 0xc4, 0x48, 0x06, 0xe1, 0xd1, 0xf1, 0xcd,
    0xfa, 0x06, 0xc1, 0xcb, 0x76, 0x28, 0x0f, 0x3e,
    0x13, 0xcb, 0x6e, 0x28, 0x02, 0x3e, 0x27, 0xdd,
    0xbe, 0x08, 0x30, 0x02, 0xcb, 0xd3, 0xdb, 0xf5,
    0xe6, 0x03, 0x57, 0xa3, 0xf5, 0x7e, 0xe6, 0x03,
    0x47, 0x04, 0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb2,
    0xb3, 0xd3, 0xf7, 0xfd, 0x77, 0x12, 0xcd, 0x6c,
    0x06, 0xdd, 0x7e, 0x08, 0xcb, 0x59, 0x28, 0x0a,
    0xb7, 0x20, 0x04, 0xcb, 0x99, 0x18, 0x03, 0xba,
    0x28, 0x06, 0xcd, 0xd7, 0x06, 0xf1, 0x37, 0xf5,
    0xf1, 0xc5, 0xe5, 0xcd, 0x74, 0x06, 0xe1, 0xc1,
    0xcb, 0x59, 0xcc, 0x28, 0x06, 0xd1, 0xc1, 0xc9,
    0xcd, 0xc5, 0x06, 0x3e, 0x04, 0xd3, 0xfb, 0xcd,
    0xc5, 0x06, 0x3e, 0x03, 0xa6, 0xd3, 0xfb, 0xcd,
    0xce, 0x06, 0xdb, 0xfb, 0xe6, 0x10, 0xc0, 0xcd,
    0xd7, 0x06, 0x3e, 0xff, 0xb7, 0x37, 0x18, 0x2c,
    0x3c, 0xcb, 0xf7, 0xfd, 0x5e, 0x0f, 0xfd, 0x56,
    0x10, 0x12, 0xfd, 0x5e, 0x0d, 0xfd, 0x56, 0x0e,
    0xc3, 0xac, 0x04, 0xfd, 0xe5, 0xe1, 0x11, 0x1a,
    0x00, 0x19, 0x57, 0x07, 0x07, 0x07, 0x82, 0x5f,
    0x16, 0x00, 0x19, 0xc9, 0xe5, 0x11, 0x07, 0x00,
    0x19, 0x56, 0xe1, 0xc9, 0x23, 0xfd, 0x46, 0x12,
    0x0e, 0xf7, 0x56, 0x1e, 0x00, 0x23, 0x30, 0x28,
    0xed, 0x5e, 0x3e, 0x00, 0xed, 0x47, 0x20, 0x0c,
    0xfb, 0x1b, 0x7a, 0xb3, 0x28, 0x08, 0x0e, 0xf7,
    0xed, 0x41, 0x18, 0xf5, 0x56, 0xfb, 0xed, 0x41,
    0x18, 0xfc, 0xed, 0x46, 0x33, 0x33, 0xcd, 0x28,
    0x07, 0x7a, 0xbe, 0x30, 0x04, 0x56, 0x18, 0x01,
    0xc0, 0xed, 0x41, 0xed, 0x41, 0x00, 0x1b, 0x7a,
    0xb3, 0xc2, 0xa9, 0x06, 0xc9, 0xcd, 0x11, 0x07,
    0xdb, 0xfa, 0xe6, 0x0f, 0x20, 0xf7, 0xdb, 0xfa,
    0xcb, 0x67, 0x20, 0xf4, 0xc9, 0xdb, 0xfa, 0xe6,
    0xc0, 0xfe, 0x80, 0x20, 0xf8, 0xc9, 0xdb, 0xfa,
    0xe6, 0xc0, 0xfe, 0xc0, 0x20, 0xf8, 0xc9, 0xcd,
    0xc5, 0x06, 0x3e, 0x07, 0xb1, 0xd3, 0xfb, 0xcd,
    0xc5, 0x06, 0x3e, 0x03, 0xa6, 0xcb, 0x59, 0x28,
    0x03, 0xdd, 0xb6, 0x09, 0xd3, 0xfb, 0xcb, 0x59,
    0xc8, 0xcd, 0xc5, 0x06, 0xdd, 0x7e, 0x08, 0xd3,
    0xfb, 0xc9, 0xe5, 0x23, 0x23, 0x23, 0xcd, 0xc5,
    0x06, 0x3e, 0x03, 0xd3, 0xfb, 0x01, 0xfb, 0x02,
    0xcd, 0xc5, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xe1,
    0xc9, 0xcd, 0xc5, 0x06, 0x3e, 0x08, 0xd3, 0xfb,
    0xcd, 0xce, 0x06, 0xdb, 0xfb, 0xe6, 0xc0, 0xfe,
    0x80, 0xc8, 0xcd, 0xce, 0x06, 0xdb, 0xfb, 0xc9,
    0xcd, 0x11, 0x07, 0xe5, 0xd5, 0x11, 0x05, 0x00,
    0x19, 0x77, 0xd1, 0xe1, 0xc9, 0x0e, 0x01, 0xdd,
    0xcb, 0x0f, 0x4e, 0xc0, 0x0c, 0xdd, 0xcb, 0x10,
    0x4e, 0xc0, 0xdd, 0xcb, 0x10, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x10, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb,
    0x0f, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x7e,
    0xc0, 0xdd, 0xcb, 0x0f, 0x56, 0xc0, 0xdd, 0xcb,
    0x0f, 0x46, 0xc0, 0xdd, 0xcb, 0x10, 0x76, 0xc0,
    0xdd, 0xcb, 0x10, 0x46, 0xc0, 0x0c, 0xdd, 0xcb,
    0x0e, 0x5e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x66,
    0xc0, 0x0c, 0xdd, 0xcb, 0x0e, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x0e, 0x7e, 0xc0, 0x0c, 0xc9, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0x13, 0x22, 0x25, 0xff,
    0xff, 0x11, 0x41, 0x0d, 0xcd, 0xc3, 0x01, 0xcd,
    0xe2, 0x04, 0xfe, 0x31, 0xfa, 0x07, 0x08, 0xfe,
    0x3a, 0xf2, 0x07, 0x08, 0xf5, 0xcd, 0xcc, 0x01,
    0x11, 0xab, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xd6,
    0x30, 0xfe, 0x04, 0xf2, 0x29, 0x08, 0x32, 0xfe,
    0xff, 0x3d, 0x07, 0x4f, 0xaf, 0x47, 0x21, 0x3b,
    0x08, 0x09, 0x5e, 0x23, 0x56, 0xeb, 0xcd, 0xdd,
    0x01, 0x18, 0xc6, 0x4d, 0x08, 0x4d, 0x08, 0x4d,
    0x08, 0xa3, 0x08, 0xcd, 0x08, 0x21, 0x09, 0xc9,
    0x09, 0x1a, 0x0a, 0x3d, 0x0a, 0x3e, 0x20, 0x32,
    0xfd, 0xff, 0x3e, 0x5f, 0x47, 0x3a, 0xfd, 0xff,
    0xcd, 0x80, 0x08, 0x05, 0x28, 0x08, 0x3c, 0xf2,
    0x58, 0x08, 0x3e, 0x20, 0x18, 0xf2, 0xcd, 0x9e,
    0x08, 0xc0, 0x3e, 0x0d, 0xcd, 0x80, 0x08, 0x3e,
    0x0a, 0xcd, 0x80, 0x08, 0x3a, 0xfd, 0xff, 0x3c,
    0xfa, 0x4d, 0x08, 0x32, 0xfd, 0xff, 0x18, 0xd2,
    0xf5, 0xc5, 0x4f, 0x3a, 0xfe, 0xff, 0xfe, 0x01,
    0x20, 0x05, 0xcd, 0x75, 0x01, 0x18, 0x0c, 0xfe,
    0x02, 0x20, 0x05, 0xcd, 0x71, 0x01, 0x18, 0x03,
    0xcd, 0x98, 0x01, 0xc1, 0xf1, 0xc9, 0xdb, 0xfd,
    0xcb, 0x4f, 0xc9, 0xdb, 0xfe, 0xaf, 0x57, 0x4f,
    0xcd, 0x71, 0x01, 0xcd, 0x85, 0x01, 0xba, 0x20,
    0x0f, 0xcd, 0x9e, 0x08, 0x20, 0x05, 0x7a, 0x3c,
    0xf2, 0xa6, 0x08, 0x11, 0x49, 0x0e, 0x18, 0x03,
    0x11, 0x3f, 0x0e, 0xcd, 0xc3, 0x01, 0x11, 0x34,
    0x0e, 0xcd, 0xc3, 0x01, 0xc9, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0xcd, 0xee, 0x08, 0x21, 0x00,
    0x00, 0x01, 0xff, 0xfb, 0xcd, 0x2a, 0xfc, 0xb7,
    0x28, 0x03, 0xcd, 0xf6, 0x08, 0xcd, 0xfe, 0x08,
    0xcd, 0x9e, 0x08, 0x28, 0xe9, 0xc9, 0xaf, 0x32,
    0xfe, 0xff, 0x32, 0xfd, 0xff, 0xc9, 0x3a, 0xfd,
    0xff, 0x3c, 0x32, 0xfd, 0xff, 0xc9, 0x11, 0x15,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfe, 0xff, 0x3c,
    0x32, 0xfe, 0xff, 0xcd, 0xb3, 0xfc, 0x11, 0xae,
    0x0e, 0xcd, 0xc3, 0x01, 0x3a, 0xfd, 0xff, 0xcd,
    0xb3, 0xfc, 0x11, 0x24, 0x0e, 0xcd, 0xc3, 0x01,
    0xc9, 0xcd, 0x3e, 0x09, 0xdd, 0x36, 0x01, 0x27,
    0xdd, 0x36, 0x03, 0x05, 0xcd, 0x74, 0x09, 0xcd,
    0xee, 0x08, 0xcd, 0x9b, 0x09, 0xcd, 0xac, 0x09,
    0xcd, 0x9e, 0x08, 0x28, 0xf5, 0xc9, 0xcd, 0x5d,
    0x01, 0x11, 0x53, 0x0e, 0xcd, 0xc3, 0x01, 0xcd,
    0xe2, 0x04, 0xe6, 0xdf, 0xd6, 0x41, 0x38, 0xf7,
    0xfe, 0x04, 0x30, 0xf3, 0xdd, 0x77, 0x00, 0xf5,
    0x11, 0x6e, 0x0e, 0xcd, 0xc3, 0x01, 0xf1, 0xc6,
    0x41, 0xcd, 0xcc, 0x01, 0x11, 0xde, 0x0c, 0xcd,
    0xc3, 0x01, 0xcd, 0xe2, 0x04, 0x11, 0xab, 0x0e,
    0xcd, 0xc3, 0x01, 0xc9, 0x01, 0x5f, 0xaa, 0x21,
    0x00, 0x80, 0xe5, 0x11, 0x02, 0x80, 0x71, 0x23,
    0x70, 0x2b, 0x01, 0x00, 0x08, 0xed, 0xb0, 0x01,
    0xb6, 0x6d, 0x71, 0x23, 0x70, 0x2b, 0x01, 0x00,
    0x0c, 0xed, 0xb0, 0xc1, 0xdd, 0x71, 0x05, 0xdd,
    0x70, 0x06, 0xc9, 0x11, 0x96, 0x0e, 0xcd, 0xc3,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x0e, 0x03,
    0xcd, 0xc0, 0x09, 0xc9, 0x11, 0xa3, 0x0e, 0xcd,
    0xc3, 0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01,
    0x03, 0xcd, 0xc0, 0x09, 0xcd, 0xfe, 0x08, 0xc9,
    0xdd, 0x7e, 0x07, 0xfe, 0x00, 0xc4, 0xf6, 0x08,
    0xc9, 0xcd, 0x3e, 0x09, 0x06, 0x00, 0x0e, 0x27,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x03, 0x01, 0xcd, 0xee, 0x08, 0xc5,
    0xcd, 0xfd, 0x09, 0xc1, 0xcd, 0xed, 0x09, 0xcd,
    0x9e, 0x08, 0x28, 0xf3, 0xc9, 0x04, 0x0d, 0xfa,
    0xf3, 0x09, 0xc9, 0x78, 0x41, 0x4f, 0xc5, 0xcd,
    0xfe, 0x08, 0xc1, 0x18, 0xf0, 0xc5, 0xdd, 0x70,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0x01, 0x03,
    0xcd, 0xc0, 0x09, 0xc1, 0xdd, 0x71, 0x01, 0xdd,
    0x36, 0x07, 0xff, 0xcd, 0x01, 0x03, 0xcd, 0xc0,
    0x09, 0xc9, 0xcd, 0x5d, 0x01, 0xaf, 0xdd, 0x77,
    0x00, 0xdd, 0x77, 0x01, 0xdd, 0x36, 0x03, 0x01,
    0xdd, 0x36, 0x05, 0x00, 0xdd, 0x36, 0x06, 0x80,
    0xdd, 0x36, 0x07, 0xfe, 0xcd, 0x01, 0x03, 0xcd,
    0x9e, 0x08, 0x28, 0xf4, 0xc9, 0xf1, 0xc9, 0xdb,
    0xf6, 0x3a, 0x00, 0x00, 0xfe, 0xc3, 0xd3, 0xf6,
    0x20, 0x03, 0xc3, 0x47, 0x00, 0x11, 0x85, 0x0c,
    0xcd, 0xc3, 0x01, 0x21, 0x00, 0x00, 0x01, 0xff,
    0xfb, 0xcd, 0x2a, 0xfc, 0xb7, 0xc2, 0xd4, 0x00,
    0x11, 0xa9, 0x0c, 0xcd, 0xc3, 0x01, 0xc3, 0x47,
    0x00, 0xdb, 0xf6, 0x22, 0x00, 0xfd, 0x21, 0xd2,
    0xfc, 0x56, 0x23, 0xcb, 0x7e, 0x20, 0x18, 0x5e,
    0xcb, 0x73, 0xcb, 0xb3, 0x23, 0xe5, 0x28, 0x05,
    0xcd, 0x54, 0xfc, 0x18, 0x07, 0xdd, 0x21, 0x74,
    0xfc, 0xcd, 0x58, 0xfc, 0xe1, 0x18, 0xe2, 0xaf,
    0xd3, 0xf6, 0xc9, 0xdd, 0x21, 0x76, 0xfc, 0x2a,
    0x00, 0xfd, 0x7b, 0x85, 0x6f, 0x7c, 0xce, 0x00,
    0x67, 0xcd, 0x72, 0xfc, 0x23, 0x23, 0x23, 0x78,
    0xbc, 0xd8, 0x20, 0xf5, 0x79, 0xbd, 0xd8, 0x18,
    0xf0, 0xdd, 0xe9, 0x72, 0xc9, 0x7e, 0xba, 0x20,
    0x01, 0xc9, 0xd3, 0xf6, 0xdb, 0xf5, 0xcb, 0x6f,
    0xcc, 0x8a, 0xfc, 0xf1, 0xf1, 0xf1, 0x3e, 0xff,
    0xc9, 0xd5, 0x11, 0x1a, 0x0d, 0xcd, 0xc3, 0x01,
    0xdb, 0xf6, 0x7e, 0xd3, 0xf6, 0xcd, 0xb3, 0xfc,
    0x11, 0x24, 0x0d, 0xcd, 0xc3, 0x01, 0xd1, 0x7a,
    0xcd, 0xb3, 0xfc, 0x11, 0x2f, 0x0d, 0xcd, 0xc3,
    0x01, 0x7c, 0xcd, 0xb3, 0xfc, 0x7d, 0xcd, 0xb3,
    0xfc, 0xc9, 0xf5, 0x0f, 0x0f, 0x0f, 0x0f, 0xe6,
    0x0f, 0xcd, 0xc4, 0xfc, 0xf1, 0xe6, 0x0f, 0xcd,
    0xc4, 0xfc, 0xc9, 0xfe, 0x0a, 0xfa, 0xcb, 0xfc,
    0xc6, 0x07, 0xc6, 0x30, 0x4f, 0xcd, 0xcc, 0x01,
    0xc9, 0xff, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00,
    0x41, 0xff, 0x42, 0xff, 0x40, 0x00, 0x00, 0xff,
    0x01, 0x00, 0x02, 0x00, 0x42, 0x00, 0x40, 0xff,
    0x41, 0xaa, 0x00, 0x55, 0x02, 0xaa, 0x01, 0xaa,
    0x41, 0x55, 0x01, 0xaa, 0x40, 0x55, 0x00, 0x55,
    0x42, 0x55, 0x41, 0x55, 0x40, 0x00, 0x80, 0x57,
    0x72, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x72, 0x61,
    0x63, 0x6b, 0xae, 0x00, 0x57, 0x72, 0x69, 0x74,
    0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63,
    0x74, 0x65, 0x64, 0xae, 0x00, 0x44, 0x61, 0x74,
    0x61, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae,
    0x00, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75,
    0x6e, 0x64, 0xae, 0x00, 0x4c, 0x6f, 0x73, 0x74,
    0x20, 0x64, 0x61, 0x74, 0x61, 0xae, 0x00, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74,
    0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0xae, 0x00,
    0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
    0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xae,
    0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xae, 0x00,
    0x0d, 0x0a, 0x44, 0x69, 0x73, 0x6b, 0x20, 0x65,
    0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20,
    0x64, 0x72, 0x69, 0x76, 0x65, 0xa0, 0x00, 0x0d,
    0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x52, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x41, 0x20,
    0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74,
    0x2c, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x20, 0x74,
    0x6f, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
    0x3a, 0xa0, 0x00, 0x0a, 0x45, 0x72, 0x72, 0x6f,
    0x72, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x50, 0x2f,
    0x4d, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x2e, 0x00, 0x0d, 0x0a, 0x50, 0x75, 0x73,
    0x68, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20,
    0x74, 0x6f, 0x20, 0x74, 0x72, 0x79, 0x20, 0x61,
    0x67, 0x61, 0x69, 0x6e, 0x2e, 0xa0, 0x00, 0x0d,
    0x4d, 0x69, 0x63, 0x72, 0x6f, 0x2d, 0x44, 0x65,
    0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2d,
    0x2d, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x52, 0x65,
    0x76, 0x2e, 0x20, 0x32, 0x2e, 0x35, 0x0d, 0x0a,
    0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
    0x74, 0x20, 0x31, 0x39, 0x38, 0x32, 0x2c, 0x20,
    0x31, 0x39, 0x38, 0x33, 0x20, 0x4d, 0x6f, 0x72,
    0x72, 0x6f, 0x77, 0x20, 0x44, 0x65, 0x73, 0x69,
    0x67, 0x6e, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63,
    0x2e, 0x0d, 0x0a, 0x0a, 0x00, 0x54, 0x65, 0x73,
    0x74, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x2d, 0x2d, 0x20, 0x70,
    0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x73, 0x74,
    0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x3a, 0x20,
    0x00, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20,
    0x4f, 0x2e, 0x4b, 0x2e, 0x0d, 0x0a, 0x0a, 0x00,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x43,
    0x50, 0x2f, 0x4d, 0x20, 0x73, 0x79, 0x73, 0x74,
    0x65, 0x6d, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x44,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x41, 0x20, 0x61,
    0x6e, 0x64, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73,
    0x20, 0x5b, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e,
    0x5d, 0x20, 0x07, 0x00, 0x07, 0x07, 0x52, 0x4f,
    0x4d, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79,
    0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x07,
    0x07, 0x52, 0x41, 0x4d, 0x20, 0x4d, 0x65, 0x6d,
    0x6f, 0x72, 0x79, 0x20, 0x65, 0x72, 0x72, 0x6f,
    0x72, 0x00, 0x07, 0x07, 0x0d, 0x0a, 0x52, 0x65,
    0x61, 0x64, 0x20, 0x00, 0x20, 0x65, 0x78, 0x70,
    0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x00, 0x20,
    0x61, 0x74, 0x20, 0x52, 0x41, 0x4d, 0x20, 0x6c,
    0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
    0x00, 0x0d, 0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e,
    0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x20, 0x4d,
    0x65, 0x6e, 0x75, 0x0d, 0x0a, 0x0a, 0x31, 0x29,
    0x20, 0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x5c, 0x0d, 0x0a, 0x32, 0x29, 0x20, 0x50,
    0x6f, 0x72, 0x74, 0x20, 0x32, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x3e, 0x20, 0x42, 0x61, 0x72, 0x62, 0x65, 0x72,
    0x2d, 0x50, 0x6f, 0x6c, 0x65, 0x20, 0x70, 0x61,
    0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x74, 0x65,
    0x73, 0x74, 0x0d, 0x0a, 0x33, 0x29, 0x20, 0x43,
    0x65, 0x6e, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63,
    0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x2f,
    0x0d, 0x0a, 0x34, 0x29, 0x20, 0x4c, 0x6f, 0x6f,
    0x70, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6f,
    0x6e, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x32,
    0x0d, 0x0a, 0x35, 0x29, 0x20, 0x52, 0x41, 0x4d,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x0d, 0x0a, 0x36,
    0x29, 0x20, 0x46, 0x44, 0x43, 0x20, 0x52, 0x2f,
    0x57, 0x0d, 0x0a, 0x37, 0x29, 0x20, 0x46, 0x44,
    0x43, 0x20, 0x73, 0x65, 0x65, 0x6b, 0x20, 0x74,
    0x65, 0x73, 0x74, 0x0d, 0x0a, 0x38, 0x29, 0x20,
    0x56, 0x46, 0x4f, 0x20, 0x74, 0x65, 0x73, 0x74,
    0x0d, 0x0a, 0x39, 0x29, 0x20, 0x42, 0x6f, 0x6f,
    0x74, 0x0d, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x65,
    0x72, 0x20, 0x23, 0x3a, 0x00, 0x0d, 0x0a, 0x45,
    0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61,
    0x73, 0x73, 0x20, 0x00, 0x20, 0x65, 0x72, 0x72,
    0x6f, 0x72, 0x73, 0x20, 0x73, 0x6f, 0x20, 0x66,
    0x61, 0x72, 0x2e, 0x00, 0x6c, 0x6f, 0x6f, 0x70,
    0x20, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x00, 0x0d,
    0x0a, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20,
    0x00, 0x0d, 0x0a, 0x50, 0x61, 0x73, 0x73, 0x65,
    0x64, 0x20, 0x00, 0x45, 0x6e, 0x74, 0x65, 0x72,
    0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x20, 0x74,
    0x6f, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x28,
    0x41, 0x2d, 0x44, 0x29, 0x3a, 0x00, 0x0d, 0x0a,
    0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61,
    0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74,
    0x65, 0x64, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x65,
    0x74, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x64,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x00, 0x0d, 0x0a,
    0x57, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x2e,
    0x2e, 0x2e, 0x00, 0x72, 0x65, 0x61, 0x64, 0x69,
    0x6e, 0x67, 0x00, 0x0d, 0x0a, 0x00, 0x3a, 0xa0,
    0x00, 0x00, 0x00, 0x01, 0x01, 0x14, 0x00, 0xfe,
    0x00, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46,
    0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0x1c, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x75, 0x01,
    0x89, 0x01, 0x01, 0xd8, 0x58, 0x05, 0x6f, 0x03,
    0x05, 0x1c, 0xff, 0x02, 0x59, 0x58, 0x05, 0x6f,
    0x03, 0x05, 0x1c, 0xff, 0x04, 0x5a, 0x58, 0x05,
    0x6f, 0x03, 0x05, 0x1c, 0xff, 0x04, 0x5b, 0x58,
    0x05, 0x6f, 0x03, 0x05, 0x1c, 0xff, 0x4c, 0x0b,
    0x3f, 0x0b, 0x5d, 0x0b, 0x5d, 0x0b, 0x69, 0x0b,
    0x7f, 0x0b, 0x74, 0x0b, 0x7f, 0x0b, 0x90, 0x0b,
    0xa1, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    };

/* MD3 3.1 ROM is 4096 bytes */
static uint8 mmd_rom_31[MMD_ROM_SIZE] = {
    0xc3, 0x2c, 0x00, 0xc3, 0x68, 0x01, 0xc3, 0x30,
    0x05, 0xc3, 0xa4, 0x02, 0xc3, 0xb1, 0x02, 0xc3,
    0x35, 0x03, 0xc3, 0xa6, 0x04, 0xc3, 0xfd, 0x04,
    0xc3, 0x79, 0x00, 0x87, 0x0f, 0xc3, 0x40, 0x01,
    0xc3, 0x82, 0x01, 0xc3, 0x94, 0x01, 0xc3, 0x2d,
    0x08, 0xc3, 0x12, 0x07, 0xed, 0x46, 0x31, 0xfe,
    0xff, 0xfd, 0x21, 0xa6, 0x0f, 0xcd, 0x85, 0x00,
    0x11, 0x03, 0x0d, 0xcd, 0x51, 0x01, 0xcd, 0xb9,
    0x00, 0xcd, 0xd7, 0x00, 0xcd, 0x00, 0xfc, 0xdb,
    0xfc, 0xdb, 0xf5, 0xcb, 0x6f, 0xcc, 0xef, 0x08,
    0xcd, 0x08, 0x01, 0xcd, 0x3f, 0x05, 0xdd, 0x36,
    0x07, 0xfe, 0xcd, 0x35, 0x03, 0xfe, 0x06, 0x20,
    0x10, 0x11, 0x8e, 0x0d, 0xcd, 0x68, 0x01, 0xcd,
    0x89, 0x04, 0x11, 0x81, 0x0f, 0xcd, 0x68, 0x01,
    0x3d, 0xb7, 0xc4, 0x35, 0x03, 0xb7, 0xca, 0x00,
    0xfe, 0x11, 0xc7, 0x0c, 0xc3, 0xc9, 0x00, 0x2a,
    0x06, 0xfc, 0x37, 0x0b, 0x0b, 0x21, 0x93, 0x00,
    0x06, 0x13, 0x4e, 0x23, 0x7e, 0x23, 0xed, 0x79,
    0x10, 0xf8, 0xc9, 0xf3, 0x3e, 0xf0, 0xff, 0xf0,
    0xff, 0xf3, 0x7e, 0xf1, 0x0d, 0xf1, 0x00, 0xf3,
    0xbe, 0xf2, 0x68, 0xf2, 0x00, 0xfd, 0x80, 0xff,
    0x80, 0xfd, 0x80, 0xff, 0x80, 0xfd, 0x40, 0xff,
    0x40, 0xfd, 0xce, 0xff, 0xce, 0xfd, 0x37, 0xff,
    0x37, 0x21, 0x00, 0x00, 0x01, 0xfd, 0x0f, 0x11,
    0xca, 0x0d, 0xcd, 0xfb, 0x00, 0xc8, 0xcd, 0x68,
    0x01, 0xdb, 0xf5, 0xcb, 0x6f, 0xca, 0x47, 0x00,
    0x11, 0xe7, 0x0c, 0xcd, 0x68, 0x01, 0x76, 0x21,
    0x0b, 0x0b, 0x11, 0x00, 0xfc, 0x01, 0x00, 0x01,
    0xed, 0xb0, 0x01, 0xf7, 0x02, 0xd5, 0xe1, 0x13,
    0x36, 0xff, 0xed, 0xb0, 0x3a, 0x82, 0x00, 0x77,
    0x21, 0x00, 0xfc, 0x01, 0xf8, 0x03, 0x11, 0xdd,
    0x0d, 0x18, 0xc7, 0xaf, 0xf5, 0xf1, 0xae, 0x23,
    0x0b, 0xf5, 0x78, 0xb1, 0x20, 0xf7, 0xf1, 0xc9,
    0x21, 0x87, 0x0f, 0x11, 0x00, 0xff, 0x01, 0x5d,
    0x00, 0xed, 0xb0, 0xdd, 0x21, 0x00, 0xff, 0xfd,
    0x21, 0x1f, 0xff, 0xc9, 0x06, 0xff, 0x18, 0x02,
    0x06, 0xfd, 0x79, 0x48, 0xed, 0x40, 0xcb, 0x40,
    0x28, 0xfa, 0x0d, 0xed, 0x79, 0xc9, 0x0e, 0xff,
    0x18, 0x02, 0x0e, 0xfd, 0xed, 0x78, 0xcb, 0x4f,
    0x28, 0xfa, 0x0d, 0xed, 0x78, 0xe6, 0x7f, 0xc9,
    0xdb, 0xf5, 0xcb, 0x67, 0x20, 0xfa, 0x79, 0xd3,
    0xf4, 0x3e, 0x80, 0xd3, 0xf5, 0xaf, 0xd3, 0xf5,
    0xc9, 0x21, 0x00, 0x00, 0x2b, 0x7c, 0xb5, 0x20,
    0xfb, 0xcd, 0x68, 0x01, 0x06, 0x32, 0x3e, 0x0a,
    0xcd, 0x71, 0x01, 0x10, 0xf9, 0x11, 0x09, 0x0d,
    0x1a, 0xb7, 0xc8, 0xcd, 0x71, 0x01, 0x13, 0x18,
    0xf7, 0x4f, 0xc5, 0xd5, 0xe5, 0xfd, 0x6e, 0x16,
    0xfd, 0x66, 0x17, 0xcd, 0x01, 0x08, 0xe1, 0xd1,
    0xc1, 0xc9, 0xfd, 0x36, 0x04, 0x00, 0xfd, 0xcb,
    0x0b, 0xde, 0xfd, 0xcb, 0x0b, 0xd6, 0xfd, 0x36,
    0x0a, 0x02, 0x18, 0x65, 0xfd, 0xcb, 0x0b, 0x9e,
    0xfd, 0x71, 0x0a, 0x79, 0xfe, 0x02, 0x20, 0x18,
    0xfd, 0x7e, 0x08, 0xfd, 0x77, 0x04, 0xfd, 0x7e,
    0x00, 0xfd, 0x77, 0x05, 0xfd, 0x7e, 0x01, 0xfd,
    0x77, 0x06, 0xfd, 0x7e, 0x02, 0xfd, 0x77, 0x07,
    0xfd, 0x7e, 0x04, 0xb7, 0x28, 0x33, 0xfd, 0x35,
    0x04, 0xfd, 0x7e, 0x00, 0xfd, 0xbe, 0x05, 0x20,
    0x28, 0xfd, 0x7e, 0x01, 0xfd, 0xbe, 0x06, 0x20,
    0x20, 0xfd, 0x7e, 0x02, 0xfd, 0xbe, 0x07, 0x20,
    0x18, 0xfd, 0x34, 0x07, 0xfd, 0x7e, 0x09, 0xfd,
    0xbe, 0x07, 0x30, 0x07, 0xfd, 0x34, 0x06, 0xfd,
    0x36, 0x07, 0x01, 0xfd, 0xcb, 0x0b, 0x96, 0x18,
    0x08, 0xfd, 0x36, 0x04, 0x00, 0xfd, 0xcb, 0x0b,
    0xd6, 0xfd, 0x7e, 0x00, 0xcd, 0xf3, 0x05, 0x23,
    0x7e, 0x2b, 0xfd, 0x5e, 0x02, 0x1d, 0x53, 0xe6,
    0x18, 0x06, 0x00, 0xfe, 0x00, 0x28, 0x14, 0x06,
    0x01, 0xfe, 0x08, 0x28, 0x0c, 0x06, 0x03, 0xfe,
    0x10, 0x28, 0x04, 0x06, 0x07, 0xcb, 0x2b, 0xcb,
    0x2b, 0xcb, 0x2b, 0xcb, 0x76, 0x20, 0x01, 0x1c,
    0xfd, 0x73, 0x03, 0x78, 0xa2, 0xfd, 0x77, 0x0c,
    0xfd, 0xcb, 0x0b, 0x46, 0xfd, 0xcb, 0x0b, 0xc6,
    0x28, 0x22, 0xfd, 0x7e, 0x00, 0xdd, 0xbe, 0x00,
    0x20, 0x10, 0xfd, 0x7e, 0x01, 0xdd, 0xbe, 0x01,
    0x20, 0x08, 0xfd, 0x7e, 0x03, 0xdd, 0xbe, 0x02,
    0x28, 0x2a, 0xaf, 0xfd, 0xcb, 0x0b, 0x4e, 0xc4,
    0xb1, 0x02, 0xb7, 0xc0, 0xfd, 0x7e, 0x00, 0xdd,
    0x77, 0x00, 0xfd, 0x7e, 0x01, 0xdd, 0x77, 0x01,
    0xfd, 0x7e, 0x03, 0xdd, 0x77, 0x02, 0xaf, 0xfd,
    0xcb, 0x0b, 0x56, 0xc4, 0xa4, 0x02, 0xb7, 0xc0,
    0xfd, 0xcb, 0x0b, 0x8e, 0xfd, 0x6e, 0x0c, 0x26,
    0x00, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
    0xdd, 0x5e, 0x05, 0xdd, 0x56, 0x06, 0x19, 0xfd,
    0x5e, 0x14, 0xfd, 0x56, 0x15, 0x01, 0x80, 0x00,
    0xaf, 0xfd, 0xcb, 0x0b, 0x5e, 0xc0, 0xfd, 0xcb,
    0x0b, 0xce, 0xeb, 0xc9, 0x21, 0xa6, 0x04, 0xdd,
    0x75, 0x0a, 0xdd, 0x74, 0x0b, 0x0e, 0x06, 0x18,
    0x0b, 0x21, 0xfd, 0x04, 0xdd, 0x75, 0x0a, 0xdd,
    0x74, 0x0b, 0x0e, 0x05, 0xdd, 0x7e, 0x00, 0xcd,
    0xf3, 0x05, 0x23, 0x7e, 0xe6, 0x40, 0xb1, 0xdd,
    0x77, 0x16, 0xdd, 0x36, 0x15, 0x09, 0x3e, 0x18,
    0xa6, 0x0f, 0x0f, 0x0f, 0xdd, 0x77, 0x1b, 0x06,
    0x80, 0x11, 0x80, 0x00, 0xfe, 0x00, 0x28, 0x11,
    0x06, 0xff, 0x11, 0x00, 0x00, 0xfe, 0x01, 0x28,
    0x08, 0x16, 0x01, 0xfe, 0x02, 0x28, 0x02, 0x16,
    0x03, 0xdd, 0x70, 0x1e, 0xdd, 0xcb, 0x0d, 0x7e,
    0x20, 0x06, 0xdd, 0x73, 0x0c, 0xdd, 0x72, 0x0d,
    0xaf, 0xcb, 0x56, 0xdd, 0x46, 0x01, 0xdd, 0x4e,
    0x02, 0x28, 0x03, 0xcb, 0x18, 0x17, 0xdd, 0x77,
    0x19, 0x07, 0x07, 0xdd, 0x77, 0x09, 0xdd, 0x70,
    0x08, 0xdd, 0x70, 0x18, 0xdd, 0x71, 0x1a, 0x3e,
    0x03, 0xa6, 0xdd, 0xb6, 0x09, 0xdd, 0x77, 0x17,
    0x11, 0x05, 0x00, 0x19, 0x7e, 0xdd, 0x77, 0x1c,
    0x23, 0x7e, 0xdd, 0x77, 0x1d, 0xdd, 0x46, 0x04,
    0x16, 0x03, 0xc5, 0xd5, 0xcd, 0x43, 0x05, 0xfd,
    0xe5, 0xcd, 0xd2, 0x03, 0xcd, 0x06, 0x04, 0xfd,
    0xe1, 0x06, 0x07, 0xdd, 0xe5, 0xe1, 0x11, 0x0e,
    0x00, 0x19, 0xcd, 0x5e, 0x06, 0xed, 0xa2, 0x20,
    0xf9, 0xd1, 0xc1, 0xdd, 0x7e, 0x0e, 0xe6, 0xc0,
    0x28, 0x35, 0xcd, 0xc5, 0x06, 0x3e, 0x01, 0xb9,
    0x28, 0x1d, 0x3e, 0x06, 0xb9, 0xcc, 0xb9, 0x03,
    0x3e, 0x02, 0xb9, 0xcc, 0x9d, 0x03, 0x3e, 0x05,
    0xb9, 0xcc, 0xa0, 0x03, 0xdd, 0x7e, 0x04, 0x0f,
    0x3c, 0xb8, 0xcc, 0x3f, 0x05, 0x10, 0xb3, 0xdd,
    0x7e, 0x07, 0xfe, 0xfe, 0x28, 0x0a, 0xcd, 0x12,
    0x04, 0x38, 0x05, 0xb7, 0xc2, 0x35, 0x03, 0x4f,
    0xdd, 0x71, 0x07, 0x79, 0xc9, 0xcd, 0x3f, 0x05,
    0xcd, 0x2a, 0x05, 0xc8, 0xdd, 0x7e, 0x08, 0xfe,
    0x03, 0xd0, 0xf5, 0xdd, 0x36, 0x08, 0x03, 0xcd,
    0x43, 0x05, 0xf1, 0xdd, 0x77, 0x08, 0xc3, 0x3f,
    0x05, 0xcd, 0x2a, 0x05, 0xc8, 0xcd, 0x3f, 0x05,
    0xdd, 0x7e, 0x08, 0xf5, 0xdd, 0x36, 0x08, 0x0a,
    0xcd, 0x43, 0x05, 0xf1, 0xdd, 0x77, 0x08, 0xc3,
    0x43, 0x05, 0x0e, 0xfb, 0xdd, 0xe5, 0xe1, 0x11,
    0x15, 0x00, 0x19, 0x46, 0x23, 0xcd, 0x48, 0x06,
    0xcd, 0x55, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xdd,
    0x46, 0x0c, 0xdd, 0x5e, 0x0d, 0xcb, 0xbb, 0xdd,
    0x56, 0x03, 0x15, 0xdd, 0x6e, 0x0a, 0xdd, 0x66,
    0x0b, 0xe5, 0xfd, 0xe1, 0xdd, 0x6e, 0x05, 0xdd,
    0x66, 0x06, 0xc9, 0xcb, 0x7f, 0xc0, 0xdb, 0xfa,
    0xcb, 0x6f, 0x28, 0xf7, 0xd5, 0x11, 0x00, 0x80,
    0xfd, 0xe9, 0x79, 0x07, 0x5f, 0x16, 0x00, 0x21,
    0xe2, 0x0f, 0x19, 0x5e, 0x23, 0x56, 0xc5, 0xd5,
    0x11, 0x7c, 0x0c, 0xcd, 0x68, 0x01, 0x3e, 0x41,
    0xdd, 0x86, 0x00, 0xcd, 0x71, 0x01, 0x11, 0x84,
    0x0f, 0xcd, 0x68, 0x01, 0xd1, 0xcd, 0x68, 0x01,
    0x3e, 0xff, 0xdd, 0xbe, 0x07, 0x37, 0xc4, 0x63,
    0x04, 0xc1, 0xc9, 0x3c, 0xcb, 0xf7, 0xfd, 0x5e,
    0x0f, 0xfd, 0x56, 0x10, 0x12, 0xfd, 0x5e, 0x0d,
    0xfd, 0x56, 0x0e, 0xcd, 0x68, 0x01, 0xcd, 0x89,
    0x04, 0xfe, 0x0d, 0x20, 0xf9, 0x11, 0x81, 0x0f,
    0xc3, 0x68, 0x01, 0x11, 0x93, 0x0c, 0xcd, 0x68,
    0x01, 0xcd, 0x89, 0x04, 0xe6, 0xdf, 0x5f, 0xfe,
    0x41, 0x37, 0x28, 0x08, 0xfe, 0x52, 0x28, 0x04,
    0xd6, 0x49, 0x20, 0xed, 0xf5, 0x7b, 0xcd, 0x71,
    0x01, 0x11, 0x81, 0x0f, 0xcd, 0x68, 0x01, 0xf1,
    0xc9, 0xc5, 0xe5, 0xfd, 0x6e, 0x18, 0xfd, 0x66,
    0x19, 0xcd, 0x01, 0x08, 0xe1, 0xc1, 0xc9, 0xe6,
    0x20, 0x28, 0x36, 0xdb, 0xfa, 0xfe, 0xf0, 0x28,
    0x0b, 0x1b, 0x7b, 0xb2, 0x28, 0x2d, 0xdb, 0xfa,
    0xfe, 0xf0, 0x20, 0xeb, 0xed, 0xa2, 0xd1, 0xd5,
    0x7b, 0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb,
    0xfa, 0xe6, 0x20, 0x28, 0x14, 0xed, 0xa2, 0x20,
    0xf4, 0x1d, 0xf2, 0xb0, 0x04, 0xd1, 0x15, 0xd5,
    0xf2, 0xb0, 0x04, 0xfb, 0x76, 0xdb, 0xf7, 0xed,
    0xa2, 0xd1, 0xc9, 0xd1, 0xe1, 0xfd, 0xe1, 0xfd,
    0xe5, 0xc5, 0x0e, 0xf7, 0xfd, 0x7e, 0x12, 0x47,
    0xcb, 0xdf, 0xed, 0x79, 0xdb, 0xfa, 0xcb, 0x6f,
    0x20, 0xfa, 0xed, 0x41, 0xc1, 0xe9, 0xe6, 0x20,
    0x28, 0xdf, 0xdb, 0xfa, 0xfe, 0xb0, 0x28, 0x0b,
    0x1b, 0x7b, 0xb2, 0x28, 0xd6, 0xdb, 0xfa, 0xfe,
    0xb0, 0x20, 0xeb, 0xed, 0xa3, 0xd1, 0xd5, 0x7b,
    0xb2, 0x20, 0x01, 0x05, 0xfb, 0x76, 0xdb, 0xfa,
    0xe6, 0x20, 0x28, 0xbd, 0xed, 0xa3, 0x20, 0xf4,
    0x1d, 0xf2, 0x07, 0x05, 0xd1, 0x15, 0xd5, 0xf2,
    0x07, 0x05, 0xfb, 0x76, 0xdb, 0xf7, 0xed, 0xa3,
    0xd1, 0xc9, 0x04, 0x15, 0xc0, 0x06, 0x01, 0xc9,
    0xfd, 0xcb, 0x0b, 0x4e, 0x20, 0x04, 0xfd, 0xcb,
    0x0b, 0x86, 0xfd, 0x36, 0x01, 0x00, 0xc9, 0x3e,
    0x00, 0x18, 0x02, 0x3e, 0x08, 0xc5, 0xd5, 0x4f,
    0xdd, 0x7e, 0x00, 0xf5, 0xcd, 0xf3, 0x05, 0x7e,
    0xe6, 0x07, 0xcb, 0x57, 0x28, 0x01, 0x0f, 0x5f,
    0x23, 0xf1, 0xfd, 0xbe, 0x11, 0x28, 0x1b, 0xfd,
    0x77, 0x11, 0xcb, 0x7e, 0xc5, 0x28, 0x0f, 0xfd,
    0xbe, 0x13, 0xfd, 0x77, 0x13, 0xf5, 0xd5, 0xe5,
    0xc4, 0x43, 0x04, 0xe1, 0xd1, 0xf1, 0xcd, 0x8a,
    0x06, 0xc1, 0xcb, 0x76, 0x28, 0x0f, 0x3e, 0x13,
    0xcb, 0x6e, 0x28, 0x02, 0x3e, 0x27, 0xdd, 0xbe,
    0x08, 0x30, 0x02, 0xcb, 0xd3, 0xdb, 0xf5, 0xe6,
    0x03, 0x57, 0xa3, 0xf5, 0x7e, 0xe6, 0x03, 0x47,
    0x04, 0x3e, 0x08, 0x07, 0x10, 0xfd, 0xb2, 0xb3,
    0xd3, 0xf7, 0xfd, 0x77, 0x12, 0xe5, 0x11, 0x07,
    0x00, 0x19, 0x56, 0xe1, 0xdd, 0x7e, 0x08, 0xcb,
    0x59, 0x28, 0x0a, 0xb7, 0x20, 0x04, 0xcb, 0x99,
    0x18, 0x03, 0xba, 0x28, 0x06, 0xcd, 0x67, 0x06,
    0xf1, 0x37, 0xf5, 0xf1, 0xc5, 0xe5, 0xcd, 0x04,
    0x06, 0xe1, 0xc1, 0xcb, 0x59, 0xcc, 0xd3, 0x05,
    0xd1, 0xc1, 0xc9, 0xcd, 0x55, 0x06, 0x3e, 0x04,
    0xd3, 0xfb, 0xcd, 0x55, 0x06, 0x3e, 0x03, 0xa6,
    0xd3, 0xfb, 0xcd, 0x5e, 0x06, 0xdb, 0xfb, 0xe6,
    0x10, 0xc0, 0xcd, 0x67, 0x06, 0x3e, 0xff, 0xb7,
    0x37, 0x18, 0x11, 0xfd, 0xe5, 0xe1, 0x11, 0x1a,
    0x00, 0x19, 0x57, 0x07, 0x07, 0x07, 0x82, 0x5f,
    0x16, 0x00, 0x19, 0xc9, 0x23, 0xfd, 0x46, 0x12,
    0x0e, 0xf7, 0x56, 0x1e, 0x00, 0x23, 0x30, 0x28,
    0xed, 0x5e, 0x3e, 0x00, 0xed, 0x47, 0x20, 0x0c,
    0xfb, 0x1b, 0x7a, 0xb3, 0x28, 0x08, 0x0e, 0xf7,
    0xed, 0x41, 0x18, 0xf5, 0x56, 0xfb, 0xed, 0x41,
    0x18, 0xfc, 0xed, 0x46, 0x33, 0x33, 0xcd, 0xb8,
    0x06, 0x7a, 0xbe, 0x30, 0x04, 0x56, 0x18, 0x01,
    0xc0, 0xed, 0x41, 0xed, 0x41, 0x00, 0x1b, 0x7a,
    0xb3, 0xc2, 0x39, 0x06, 0xc9, 0xcd, 0xa1, 0x06,
    0xdb, 0xfa, 0xe6, 0x0f, 0x20, 0xf7, 0xdb, 0xfa,
    0xcb, 0x67, 0x20, 0xf4, 0xc9, 0xdb, 0xfa, 0xe6,
    0xc0, 0xfe, 0x80, 0x20, 0xf8, 0xc9, 0xdb, 0xfa,
    0xe6, 0xc0, 0xfe, 0xc0, 0x20, 0xf8, 0xc9, 0xcd,
    0x55, 0x06, 0x3e, 0x07, 0xb1, 0xd3, 0xfb, 0xcd,
    0x55, 0x06, 0x3e, 0x03, 0xa6, 0xcb, 0x59, 0x28,
    0x03, 0xdd, 0xb6, 0x09, 0xd3, 0xfb, 0xcb, 0x59,
    0xc8, 0xcd, 0x55, 0x06, 0xdd, 0x7e, 0x08, 0xd3,
    0xfb, 0xc9, 0xe5, 0x23, 0x23, 0x23, 0xcd, 0x55,
    0x06, 0x3e, 0x03, 0xd3, 0xfb, 0x01, 0xfb, 0x02,
    0xcd, 0x55, 0x06, 0xed, 0xa3, 0x20, 0xf9, 0xe1,
    0xc9, 0xcd, 0x55, 0x06, 0x3e, 0x08, 0xd3, 0xfb,
    0xcd, 0x5e, 0x06, 0xdb, 0xfb, 0xe6, 0xc0, 0xfe,
    0x80, 0xc8, 0xcd, 0x5e, 0x06, 0xdb, 0xfb, 0xc9,
    0xcd, 0xa1, 0x06, 0xe5, 0xd5, 0x11, 0x05, 0x00,
    0x19, 0x77, 0xd1, 0xe1, 0xc9, 0x0e, 0x01, 0xdd,
    0xcb, 0x0f, 0x4e, 0xc0, 0x0c, 0xdd, 0xcb, 0x10,
    0x4e, 0xc0, 0xdd, 0xcb, 0x10, 0x66, 0xc0, 0x0c,
    0xdd, 0xcb, 0x10, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb,
    0x0f, 0x6e, 0xc0, 0x0c, 0xdd, 0xcb, 0x0f, 0x7e,
    0xc0, 0xdd, 0xcb, 0x0f, 0x56, 0xc0, 0xdd, 0xcb,
    0x0f, 0x46, 0xc0, 0xdd, 0xcb, 0x10, 0x46, 0xc0,
    0x0c, 0xdd, 0xcb, 0x0e, 0x5e, 0xc0, 0x0c, 0xdd,
    0xcb, 0x0f, 0x66, 0xc0, 0x0c, 0xdd, 0xcb, 0x0e,
    0x66, 0xc0, 0x0c, 0xdd, 0xcb, 0x0e, 0x7e, 0xc0,
    0x0c, 0xc9, 0xfd, 0x6e, 0x08, 0xfd, 0x66, 0x09,
    0xfd, 0xe5, 0xe5, 0xfd, 0xe1, 0xfd, 0x7e, 0x12,
    0xb7, 0x20, 0x2a, 0x3e, 0x1f, 0xb9, 0xda, 0xee,
    0x07, 0x3e, 0x1b, 0xb9, 0x20, 0x07, 0xfd, 0x36,
    0x12, 0x01, 0xfd, 0xe1, 0xc9, 0xfd, 0xe1, 0xfd,
    0x6e, 0x02, 0xfd, 0x66, 0x03, 0xcd, 0x02, 0x08,
    0xb7, 0xca, 0xc3, 0x07, 0xfd, 0x6e, 0x06, 0xfd,
    0x66, 0x07, 0xc3, 0xde, 0x07, 0xfe, 0x01, 0x28,
    0x54, 0xfe, 0x02, 0x28, 0x71, 0xfd, 0x7e, 0x14,
    0x81, 0xfd, 0x77, 0x17, 0xfd, 0x36, 0x12, 0x00,
    0xfd, 0xe5, 0xe1, 0x11, 0x16, 0x00, 0x19, 0xeb,
    0x1a, 0xfd, 0x86, 0x13, 0x12, 0xfd, 0x7e, 0x15,
    0xf5, 0x1f, 0x9f, 0x47, 0x7b, 0x90, 0x5f, 0xfd,
    0xe5, 0xe1, 0xcd, 0xe3, 0x07, 0x1a, 0x4f, 0xf1,
    0xcb, 0x4f, 0xf5, 0xc4, 0x15, 0x08, 0xcd, 0xf0,
    0x07, 0xd5, 0x11, 0x06, 0x00, 0xcd, 0xf2, 0x07,
    0xd1, 0x7b, 0x80, 0x04, 0x80, 0x5f, 0x1a, 0x4f,
    0xf1, 0xc4, 0x15, 0x08, 0xcd, 0xf0, 0x07, 0x11,
    0x0c, 0x00, 0xf1, 0x18, 0x4d, 0x3e, 0x3d, 0xb9,
    0x28, 0x2d, 0xfd, 0x36, 0x12, 0x00, 0xfd, 0xe1,
    0xfd, 0x6e, 0x00, 0xfd, 0x66, 0x01, 0xcd, 0x02,
    0x08, 0xb7, 0x20, 0x13, 0xc5, 0x0e, 0x1b, 0xcd,
    0xf0, 0x07, 0xc1, 0x48, 0x18, 0x2a, 0xfd, 0x71,
    0x16, 0xfd, 0x36, 0x12, 0x03, 0x18, 0x0c, 0xfd,
    0x6e, 0x04, 0xfd, 0x66, 0x05, 0x18, 0x07, 0xfd,
    0x36, 0x12, 0x02, 0xfd, 0xe1, 0xc9, 0x09, 0x5e,
    0x23, 0x56, 0xeb, 0x7e, 0xfe, 0xff, 0xc8, 0x4f,
    0xcd, 0xf0, 0x07, 0x23, 0x18, 0xf5, 0xfd, 0xe1,
    0xdd, 0xe9, 0xfd, 0xe5, 0xe1, 0x19, 0x18, 0xeb,
    0x3e, 0x05, 0xd1, 0xc9, 0x13, 0x22, 0x31, 0xff,
    0xff, 0xe9, 0x41, 0x0e, 0x00, 0x7e, 0xb8, 0x20,
    0x04, 0xaf, 0x47, 0x3d, 0xc9, 0xd6, 0xff, 0xc8,
    0x23, 0x0c, 0x0c, 0x18, 0xf0, 0xc5, 0x79, 0x0e,
    0x30, 0xd6, 0x0a, 0x38, 0x03, 0x0c, 0x18, 0xf9,
    0x47, 0x3e, 0x30, 0xb9, 0xc4, 0xf0, 0x07, 0x3e,
    0x3a, 0x80, 0xc1, 0x4f, 0xc9, 0xe5, 0x3e, 0x04,
    0xb9, 0x38, 0xc5, 0xfd, 0x71, 0x00, 0xcb, 0x43,
    0x20, 0x7d, 0x79, 0xcd, 0xf3, 0x05, 0xcb, 0x7e,
    0x20, 0x75, 0x23, 0xe5, 0xc5, 0xcd, 0xbb, 0x08,
    0xc1, 0xe1, 0xb7, 0x20, 0xab, 0xe5, 0xdd, 0x6e,
    0x05, 0xdd, 0x66, 0x06, 0x11, 0x99, 0x00, 0x19,
    0x06, 0x19, 0x1e, 0x00, 0x3e, 0x00, 0x2b, 0xae,
    0x57, 0xb3, 0x5f, 0x7a, 0x10, 0xf8, 0x23, 0xb7,
    0x7b, 0x11, 0xe0, 0x08, 0x20, 0x19, 0xb7, 0x28,
    0x16, 0xe5, 0xdd, 0x6e, 0x05, 0xdd, 0x66, 0x06,
    0x11, 0x89, 0x00, 0x19, 0xeb, 0xe1, 0xcb, 0x56,
    0x28, 0x05, 0xe1, 0xcb, 0xd6, 0x18, 0x03, 0xe1,
    0xcb, 0x96, 0xaf, 0x26, 0x00, 0x69, 0x29, 0x29,
    0x29, 0x29, 0xc1, 0x09, 0xe5, 0xd5, 0x11, 0x0a,
    0x00, 0x19, 0x5e, 0x23, 0x56, 0xe1, 0xd5, 0x20,
    0x05, 0x01, 0x0f, 0x00, 0xed, 0xb0, 0xe1, 0x7e,
    0xfd, 0x77, 0x09, 0x23, 0x23, 0x23, 0x7e, 0x3c,
    0xfd, 0x77, 0x08, 0xd1, 0x3e, 0x00, 0xc9, 0xf6,
    0xff, 0x18, 0xd0, 0xc5, 0xaf, 0xfd, 0xcb, 0x0b,
    0x4e, 0xc4, 0xb1, 0x02, 0xfd, 0xcb, 0x0b, 0x8e,
    0xfd, 0xcb, 0x0b, 0x86, 0xc1, 0xb7, 0xc0, 0xdd,
    0x71, 0x00, 0xdd, 0x36, 0x01, 0x00, 0xdd, 0x36,
    0x02, 0x01, 0xcd, 0x30, 0x05, 0xc3, 0xa4, 0x02,
    0x28, 0x00, 0x04, 0x0f, 0x01, 0x5e, 0x00, 0x7f,
    0x00, 0xc0, 0x00, 0x20, 0x00, 0x02, 0x00, 0x11,
    0x17, 0x0e, 0xcd, 0x68, 0x01, 0xcd, 0x89, 0x04,
    0xfe, 0x31, 0x38, 0xf9, 0xfe, 0x3a, 0x30, 0xf5,
    0xf5, 0xcd, 0x71, 0x01, 0x11, 0x81, 0x0f, 0xcd,
    0x68, 0x01, 0xf1, 0xd6, 0x30, 0x32, 0xff, 0xff,
    0x3d, 0x07, 0x4f, 0xaf, 0x47, 0x21, 0x22, 0x09,
    0x09, 0x5e, 0x23, 0x56, 0xeb, 0xcd, 0x01, 0x08,
    0x18, 0xcd, 0x34, 0x09, 0x34, 0x09, 0x34, 0x09,
    0x7e, 0x09, 0xa8, 0x09, 0xf8, 0x09, 0x97, 0x0a,
    0xe8, 0x0a, 0x06, 0x01, 0x21, 0xfe, 0xff, 0x36,
    0x20, 0x06, 0x4f, 0x7e, 0xcd, 0x5b, 0x09, 0x3c,
    0xf2, 0x45, 0x09, 0x3e, 0x20, 0x10, 0xf5, 0xcd,
    0x79, 0x09, 0xc0, 0x3e, 0x0d, 0xcd, 0x5b, 0x09,
    0x3e, 0x0a, 0xcd, 0x5b, 0x09, 0x34, 0xfa, 0x34,
    0x09, 0x18, 0xde, 0xf5, 0xc5, 0x4f, 0x3a, 0xff,
    0xff, 0xfe, 0x01, 0x20, 0x05, 0xcd, 0x20, 0x01,
    0x18, 0x0c, 0xfe, 0x02, 0x20, 0x05, 0xcd, 0x1c,
    0x01, 0x18, 0x03, 0xcd, 0x40, 0x01, 0xc1, 0xf1,
    0xc9, 0xdb, 0xfd, 0xcb, 0x4f, 0xc9, 0xdb, 0xfe,
    0xaf, 0x57, 0x4f, 0xcd, 0x1c, 0x01, 0xcd, 0x2e,
    0x01, 0xba, 0x20, 0x0f, 0xcd, 0x79, 0x09, 0x20,
    0x05, 0x7a, 0x3c, 0xf2, 0x81, 0x09, 0x11, 0x1f,
    0x0f, 0x18, 0x03, 0x11, 0x15, 0x0f, 0xcd, 0x68,
    0x01, 0x11, 0x0a, 0x0f, 0xcd, 0x68, 0x01, 0xc9,
    0x11, 0x5b, 0x0d, 0xcd, 0x68, 0x01, 0xcd, 0xc6,
    0x09, 0x21, 0x00, 0x00, 0x01, 0xff, 0xfb, 0xcd,
    0x27, 0xfc, 0xcd, 0xce, 0x09, 0xcd, 0xd5, 0x09,
    0xcd, 0x79, 0x09, 0x28, 0xec, 0xc9, 0xaf, 0x32,
    0xff, 0xff, 0x32, 0xfe, 0xff, 0xc9, 0xb7, 0xc8,
    0x21, 0xfe, 0xff, 0x34, 0xc9, 0x11, 0xeb, 0x0e,
    0xcd, 0x68, 0x01, 0x3a, 0xff, 0xff, 0x3c, 0x32,
    0xff, 0xff, 0xcd, 0xb8, 0xfc, 0x11, 0x84, 0x0f,
    0xcd, 0x68, 0x01, 0x3a, 0xfe, 0xff, 0xcd, 0xb8,
    0xfc, 0x11, 0xfa, 0x0e, 0xcd, 0x68, 0x01, 0xc9,
    0xcd, 0x15, 0x0a, 0xdd, 0x36, 0x01, 0x27, 0xdd,
    0x36, 0x03, 0x05, 0xcd, 0x4b, 0x0a, 0xcd, 0xc6,
    0x09, 0xcd, 0x72, 0x0a, 0xcd, 0x83, 0x0a, 0xcd,
    0x79, 0x09, 0x28, 0xf5, 0xc9, 0xcd, 0x08, 0x01,
    0x11, 0x29, 0x0f, 0xcd, 0x68, 0x01, 0xcd, 0x89,
    0x04, 0xe6, 0xdf, 0xd6, 0x41, 0x38, 0xf7, 0xfe,
    0x04, 0x30, 0xf3, 0xdd, 0x77, 0x00, 0xf5, 0x11,
    0x44, 0x0f, 0xcd, 0x68, 0x01, 0xf1, 0xc6, 0x41,
    0xcd, 0x71, 0x01, 0x11, 0xb4, 0x0d, 0xcd, 0x68,
    0x01, 0xcd, 0x89, 0x04, 0x11, 0x81, 0x0f, 0xcd,
    0x68, 0x01, 0xc9, 0x01, 0x5f, 0xaa, 0x21, 0x00,
    0x80, 0xe5, 0x11, 0x02, 0x80, 0x71, 0x23, 0x70,
    0x2b, 0x01, 0x00, 0x08, 0xed, 0xb0, 0x01, 0xb6,
    0x6d, 0x71, 0x23, 0x70, 0x2b, 0x01, 0x00, 0x0c,
    0xed, 0xb0, 0xc1, 0xdd, 0x71, 0x05, 0xdd, 0x70,
    0x06, 0xc9, 0x11, 0x6c, 0x0f, 0xcd, 0x68, 0x01,
    0xdd, 0x36, 0x07, 0xff, 0xcd, 0xb1, 0x02, 0xcd,
    0xce, 0x09, 0xc9, 0x11, 0x79, 0x0f, 0xcd, 0x68,
    0x01, 0xdd, 0x36, 0x07, 0xff, 0xcd, 0xa4, 0x02,
    0xcd, 0xce, 0x09, 0xcd, 0xd5, 0x09, 0xc9, 0xcd,
    0x15, 0x0a, 0x06, 0x00, 0x0e, 0x27, 0xdd, 0x36,
    0x05, 0x00, 0xdd, 0x36, 0x06, 0x80, 0xdd, 0x36,
    0x03, 0x01, 0xcd, 0xc6, 0x09, 0xc5, 0xcd, 0xcb,
    0x0a, 0xc1, 0xcd, 0xbb, 0x0a, 0xcd, 0x79, 0x09,
    0x28, 0xf3, 0xc9, 0x04, 0x0d, 0xfa, 0xc1, 0x0a,
    0xc9, 0x78, 0x41, 0x4f, 0xc5, 0xcd, 0xd5, 0x09,
    0xc1, 0x18, 0xf0, 0xc5, 0xdd, 0x70, 0x01, 0xdd,
    0x36, 0x07, 0xff, 0xcd, 0xa4, 0x02, 0xcd, 0xce,
    0x09, 0xc1, 0xdd, 0x71, 0x01, 0xdd, 0x36, 0x07,
    0xff, 0xcd, 0xa4, 0x02, 0xcd, 0xce, 0x09, 0xc9,
    0xcd, 0x08, 0x01, 0xaf, 0xdd, 0x77, 0x00, 0xdd,
    0x77, 0x01, 0xdd, 0x36, 0x03, 0x01, 0xdd, 0x36,
    0x05, 0x00, 0xdd, 0x36, 0x06, 0x80, 0xdd, 0x36,
    0x07, 0xfe, 0xcd, 0xa4, 0x02, 0xcd, 0x79, 0x09,
    0x28, 0xf4, 0xc9, 0xdb, 0xf6, 0x3a, 0x00, 0x00,
    0xfe, 0xc3, 0xd3, 0xf6, 0xc8, 0x11, 0x5b, 0x0d,
    0xcd, 0x68, 0x01, 0x21, 0x00, 0x00, 0x01, 0xff,
    0xfb, 0xcd, 0x27, 0xfc, 0xb7, 0x11, 0xdd, 0x0d,
    0xc2, 0xc6, 0x00, 0x11, 0x7f, 0x0d, 0xcd, 0x68,
    0x01, 0xc9, 0xdb, 0xf6, 0x22, 0x00, 0xfd, 0x21,
    0xd2, 0xfc, 0x56, 0x23, 0xcb, 0x7e, 0x20, 0x18,
    0x5e, 0xcb, 0x73, 0xcb, 0xb3, 0x23, 0xe5, 0x28,
    0x05, 0xcd, 0x56, 0xfc, 0x18, 0x07, 0xdd, 0x21,
    0x76, 0xfc, 0xcd, 0x5a, 0xfc, 0xe1, 0x18, 0xe2,
    0x3e, 0xc3, 0x32, 0x00, 0x00, 0xaf, 0xd3, 0xf6,
    0xc9, 0xdd, 0x21, 0x78, 0xfc, 0x2a, 0x00, 0xfd,
    0x7b, 0x85, 0x6f, 0x7c, 0xce, 0x00, 0x67, 0xcd,
    0x74, 0xfc, 0x23, 0x23, 0x23, 0x78, 0xbc, 0xd8,
    0x20, 0xf5, 0x79, 0xbd, 0xd8, 0x18, 0xf0, 0xdd,
    0xe9, 0x72, 0xc9, 0x7e, 0xba, 0x20, 0x01, 0xc9,
    0x5f, 0xd3, 0xf6, 0xdb, 0xf5, 0xcb, 0x6f, 0xcc,
    0x8d, 0xfc, 0xf1, 0xf1, 0xf1, 0x3e, 0xff, 0xc9,
    0xd5, 0x11, 0xf0, 0x0d, 0xcd, 0x68, 0x01, 0xdb,
    0xf6, 0xd1, 0xd5, 0x7b, 0xd3, 0xf6, 0xcd, 0xb8,
    0xfc, 0x11, 0xfa, 0x0d, 0xcd, 0x68, 0x01, 0xd1,
    0x7a, 0xcd, 0xb8, 0xfc, 0x11, 0x05, 0x0e, 0xcd,
    0x68, 0x01, 0x7c, 0xcd, 0xb8, 0xfc, 0x7d, 0xcd,
    0xb8, 0xfc, 0xc9, 0xf5, 0x0f, 0x0f, 0x0f, 0x0f,
    0xe6, 0x0f, 0xcd, 0xc5, 0xfc, 0xf1, 0xe6, 0x0f,
    0xfe, 0x0a, 0x38, 0x02, 0xc6, 0x07, 0xc6, 0x30,
    0x4f, 0xcd, 0x71, 0x01, 0xc9, 0xff, 0x00, 0x00,
    0x01, 0xff, 0x02, 0x00, 0x41, 0xff, 0x42, 0xff,
    0x40, 0x00, 0x00, 0xff, 0x01, 0x00, 0x02, 0x00,
    0x42, 0x00, 0x40, 0xff, 0x41, 0xaa, 0x00, 0x55,
    0x02, 0xaa, 0x01, 0xaa, 0x41, 0x55, 0x01, 0xaa,
    0x40, 0x55, 0x00, 0x55, 0x42, 0x55, 0x41, 0x55,
    0x40, 0x00, 0x80, 0x57, 0x72, 0x6f, 0x6e, 0x67,
    0x20, 0x74, 0x72, 0x61, 0x63, 0x6b, 0xae, 0x00,
    0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x70, 0x72,
    0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0xae,
    0x00, 0x44, 0x61, 0x74, 0x61, 0x20, 0x65, 0x72,
    0x72, 0x6f, 0x72, 0xae, 0x00, 0x4e, 0x6f, 0x74,
    0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xae, 0x00,
    0x4c, 0x6f, 0x73, 0x74, 0x20, 0x64, 0x61, 0x74,
    0x61, 0xae, 0x00, 0x44, 0x72, 0x69, 0x76, 0x65,
    0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61,
    0x64, 0x79, 0xae, 0x00, 0x49, 0x6e, 0x76, 0x61,
    0x6c, 0x69, 0x64, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
    0x61, 0x6e, 0x64, 0xae, 0x00, 0x55, 0x6e, 0x6b,
    0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x65, 0x72, 0x72,
    0x6f, 0x72, 0xae, 0x00, 0x0d, 0x0a, 0x44, 0x69,
    0x73, 0x6b, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
    0x20, 0x6f, 0x6e, 0x20, 0x64, 0x72, 0x69, 0x76,
    0x65, 0xa0, 0x00, 0x0d, 0x0a, 0x54, 0x79, 0x70,
    0x65, 0x20, 0x52, 0x20, 0x74, 0x6f, 0x20, 0x74,
    0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e,
    0x2c, 0x20, 0x41, 0x20, 0x74, 0x6f, 0x20, 0x61,
    0x62, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x6f, 0x72,
    0x20, 0x49, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x67,
    0x6e, 0x6f, 0x72, 0x65, 0x3a, 0xa0, 0x00, 0x0a,
    0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x6e,
    0x20, 0x43, 0x50, 0x2f, 0x4d, 0x20, 0x73, 0x79,
    0x73, 0x74, 0x65, 0x6d, 0x20, 0x64, 0x69, 0x73,
    0x6b, 0x65, 0x74, 0x74, 0x65, 0x2e, 0x00, 0x0d,
    0x0a, 0x50, 0x75, 0x73, 0x68, 0x20, 0x72, 0x65,
    0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74,
    0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e,
    0x2e, 0xa0, 0x00, 0x1b, 0x25, 0x1b, 0x47, 0x30,
    0x00, 0x0d, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x2d,
    0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e,
    0x20, 0x2d, 0x2d, 0x20, 0x52, 0x4f, 0x4d, 0x20,
    0x52, 0x65, 0x76, 0x2e, 0x20, 0x33, 0x2e, 0x31,
    0x0d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69,
    0x67, 0x68, 0x74, 0x20, 0x31, 0x39, 0x38, 0x32,
    0x2c, 0x31, 0x39, 0x38, 0x33, 0x2c, 0x31, 0x39,
    0x38, 0x34, 0x20, 0x4d, 0x6f, 0x72, 0x72, 0x6f,
    0x77, 0x20, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e,
    0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0d,
    0x0a, 0x0a, 0x00, 0x54, 0x65, 0x73, 0x74, 0x69,
    0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
    0x79, 0x20, 0x2d, 0x2d, 0x20, 0x70, 0x6c, 0x65,
    0x61, 0x73, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e,
    0x64, 0x20, 0x62, 0x79, 0x3a, 0x20, 0x00, 0x4d,
    0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x4f, 0x2e,
    0x4b, 0x2e, 0x0d, 0x0a, 0x0a, 0x00, 0x49, 0x6e,
    0x73, 0x65, 0x72, 0x74, 0x20, 0x43, 0x50, 0x2f,
    0x4d, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x20, 0x69, 0x6e, 0x20, 0x44, 0x72, 0x69,
    0x76, 0x65, 0x20, 0x41, 0x20, 0x61, 0x6e, 0x64,
    0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x5b,
    0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x5d, 0x20,
    0x07, 0x00, 0x07, 0x07, 0x52, 0x4f, 0x4d, 0x20,
    0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x65,
    0x72, 0x72, 0x6f, 0x72, 0x00, 0x07, 0x07, 0x52,
    0x41, 0x4d, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72,
    0x79, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00,
    0x07, 0x07, 0x0d, 0x0a, 0x52, 0x65, 0x61, 0x64,
    0x20, 0x00, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63,
    0x74, 0x65, 0x64, 0x20, 0x00, 0x20, 0x61, 0x74,
    0x20, 0x52, 0x41, 0x4d, 0x20, 0x6c, 0x6f, 0x63,
    0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x00, 0x0d,
    0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73,
    0x74, 0x69, 0x63, 0x73, 0x20, 0x4d, 0x65, 0x6e,
    0x75, 0x0d, 0x0a, 0x0a, 0x31, 0x29, 0x20, 0x50,
    0x6f, 0x72, 0x74, 0x20, 0x31, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c,
    0x0d, 0x0a, 0x32, 0x29, 0x20, 0x50, 0x6f, 0x72,
    0x74, 0x20, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3e, 0x20,
    0x42, 0x61, 0x72, 0x62, 0x65, 0x72, 0x2d, 0x50,
    0x6f, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x74, 0x74,
    0x65, 0x72, 0x6e, 0x20, 0x74, 0x65, 0x73, 0x74,
    0x0d, 0x0a, 0x33, 0x29, 0x20, 0x43, 0x65, 0x6e,
    0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x73, 0x20,
    0x70, 0x6f, 0x72, 0x74, 0x20, 0x2f, 0x0d, 0x0a,
    0x34, 0x29, 0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20,
    0x62, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x20,
    0x70, 0x6f, 0x72, 0x74, 0x20, 0x32, 0x0d, 0x0a,
    0x35, 0x29, 0x20, 0x52, 0x41, 0x4d, 0x20, 0x74,
    0x65, 0x73, 0x74, 0x0d, 0x0a, 0x36, 0x29, 0x20,
    0x46, 0x44, 0x43, 0x20, 0x52, 0x2f, 0x57, 0x0d,
    0x0a, 0x37, 0x29, 0x20, 0x46, 0x44, 0x43, 0x20,
    0x73, 0x65, 0x65, 0x6b, 0x20, 0x74, 0x65, 0x73,
    0x74, 0x0d, 0x0a, 0x38, 0x29, 0x20, 0x56, 0x46,
    0x4f, 0x20, 0x74, 0x65, 0x73, 0x74, 0x0d, 0x0a,
    0x39, 0x29, 0x20, 0x42, 0x6f, 0x6f, 0x74, 0x0d,
    0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x20,
    0x23, 0x3a, 0x00, 0x0d, 0x0a, 0x45, 0x6e, 0x64,
    0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x73, 0x73,
    0x20, 0x00, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
    0x73, 0x20, 0x73, 0x6f, 0x20, 0x66, 0x61, 0x72,
    0x2e, 0x00, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x74,
    0x65, 0x73, 0x74, 0x2e, 0x00, 0x0d, 0x0a, 0x46,
    0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x00, 0x0d,
    0x0a, 0x50, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20,
    0x00, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x64,
    0x72, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20,
    0x74, 0x65, 0x73, 0x74, 0x20, 0x28, 0x41, 0x2d,
    0x44, 0x29, 0x3a, 0x00, 0x0d, 0x0a, 0x49, 0x6e,
    0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x20, 0x66,
    0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64,
    0x20, 0x64, 0x69, 0x73, 0x6b, 0x65, 0x74, 0x74,
    0x65, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x72, 0x69,
    0x76, 0x65, 0x20, 0x00, 0x0d, 0x0a, 0x57, 0x72,
    0x69, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e,
    0x00, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67,
    0x00, 0x0d, 0x0a, 0x00, 0x3a, 0xa0, 0x00, 0x00,
    0x00, 0x01, 0x01, 0x0a, 0x00, 0xfe, 0x00, 0x00,
    0x00, 0xa6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x09, 0x46, 0x00, 0x00,
    0x00, 0x01, 0x03, 0x05, 0x1c, 0xff, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x32, 0x01,
    0x01, 0xd8, 0x58, 0x05, 0x6f, 0x03, 0x05, 0x1c,
    0xff, 0x02, 0x59, 0x58, 0x05, 0x6f, 0x03, 0x05,
    0x1c, 0xff, 0x04, 0x5a, 0x58, 0x05, 0x6f, 0x03,
    0x05, 0x1c, 0xff, 0x04, 0x5b, 0x58, 0x05, 0x6f,
    0x03, 0x05, 0x1c, 0xff, 0x18, 0x0c, 0x0b, 0x0c,
    0x29, 0x0c, 0x29, 0x0c, 0x35, 0x0c, 0x4b, 0x0c,
    0x40, 0x0c, 0x4b, 0x0c, 0x5c, 0x0c, 0x6d, 0x0c,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    };

static uint8 *mmd_rom = mmd_rom_31;    /* Default 3.1 ROM */

/*******************/
/* MMD Definitions */
/*******************/

#define MMD_MAX_DRIVES  4
#define MMD_UNITS       MMD_MAX_DRIVES + 1
#define MMD_SIO1_UNIT   MMD_UNITS - 1
#define MMD_SECTOR_LEN  1024
#define MMD_SPT         5           /* Sectors per Track */
#define MMD_BPT         (MMD_SPT * MMD_SECTOR_LEN)
#define MMD_TRACKS      40
#define MMD_SIDES       2
#define MMD_CAPACITY    (MMD_BPT * MMD_TRACKS * MMD_SIDES)  /* Default Disk Capacity */

#define MMD_IO_BASE     0xf0
#define MMD_IO_SIZE     14        /* FE is used by SIMH */

#define MMD_REG_CH0DIV   0xf0
#define MMD_REG_CH1DIV   0xf1
#define MMD_REG_CH2DIV   0xf2
#define MMD_REG_CTCSEL   0xf3
#define MMD_REG_CENDATA  0xf4
#define MMD_REG_MTRCHK   0xf5
#define MMD_REG_ROMCTL   0xf6
#define MMD_REG_VFO      0xf7
#define MMD_REG_TC       0xf7
#define MMD_REG_MOTOR    0xf8
#define MMD_REG_FDCSTAT  0xfa
#define MMD_REG_FDCDATA  0xfb
#define MMD_REG_CDATA    0xfc
#define MMD_REG_CSTAT    0xfd


#define MMD_CH_1         0x7e    /* Select CTC Channel 1 */
#define MMD_CH_2         0xbe    /* Select CTC Channel 2 */

#define MMD_STAT_MTR     0x03
#define MMD_STAT_MTRON   0x01
#define MMD_STAT_IDX     0x04
#define MMD_STAT_ACK     0x08
#define MMD_STAT_BUSY    0x10
#define MMD_STAT_DIAG    0x20
#define MMD_STAT_STROBE  0x80

#define MMD_STAT_D0B     0x01
#define MMD_STAT_D1B     0x02
#define MMD_STAT_D2B     0x04
#define MMD_STAT_D3B     0x08
#define MMD_STAT_BUSY    0x10
#define MMD_STAT_EXM     0x20
#define MMD_STAT_DIO     0x40
#define MMD_STAT_RQM     0x80

#define MMD_STAT0_US0     0x01    /* Unit Select 0 */
#define MMD_STAT0_US1     0x02    /* Unit Select 1 */
#define MMD_STAT0_HD      0x04    /* Head Address */
#define MMD_STAT0_NR      0x08    /* Not Ready */
#define MMD_STAT0_EC      0x10    /* Equipment Check */
#define MMD_STAT0_SE      0x20    /* Seek End */
#define MMD_STAT0_ICMASK  0xc0    /* Interrupt Code Mask */
#define MMD_STAT0_NT      0x00    /* Normal Termination */
#define MMD_STAT0_AT1     0x40    /* Abnormal Termination */
#define MMD_STAT0_IC      0x80    /* Invalid Command Issue */
#define MMD_STAT0_AT2     0xc0    /* Abnormal Termination */

#define MMD_STAT1_MA      0x10    /* Missing Address Mark */
#define MMD_STAT1_NW      0x20    /* Not Writable */
#define MMD_STAT1_ND      0x40    /* No Data */
#define MMD_STAT1_OR      0x10    /* Overrun Error */
#define MMD_STAT1_CRC     0x20    /* CRC Error */
#define MMD_STAT1_EN      0x80    /* End of Cylinder */

#define MMD_STAT2_MD      0x01    /* Missing Address Mark */
#define MMD_STAT2_BC      0x02    /* Bad Cylinder */
#define MMD_STAT2_SN      0x04    /* Scan Not Satisfied */
#define MMD_STAT2_SH      0x08    /* Scan Equal Hit */
#define MMD_STAT2_WC      0x10    /* Wrong Cylinder */
#define MMD_STAT2_DD      0x20    /* Data Error in Data Field */
#define MMD_STAT2_CM      0x40    /* Control Mark */

#define MMD_STAT3_US0     0x01    /* Unit Select 0 */
#define MMD_STAT3_US1     0x02    /* Unit Select 1 */
#define MMD_STAT3_HD      0x04    /* Head Address */
#define MMD_STAT3_TS      0x08    /* Two Side */
#define MMD_STAT3_TO      0x10    /* Track 0 */
#define MMD_STAT3_RY      0x20    /* Ready */
#define MMD_STAT3_WP      0x40    /* Write Protected */
#define MMD_STAT3_FT      0x80    /* Fault */

#define MMD_CMD_MASK     0x1f
#define MMD_CMD_SPECIFY  0x03
#define MMD_CMD_SDS      0x04
#define MMD_CMD_WRITE    0x05
#define MMD_CMD_READ     0x06
#define MMD_CMD_RECALIB  0x07
#define MMD_CMD_SIS      0x08
#define MMD_CMD_FORMAT   0x0d
#define MMD_CMD_SEEK     0x0f

#define MMD_FLAG_SK      0x20
#define MMD_FLAG_MF      0x40
#define MMD_FLAG_MT      0x80

static uint8 secbuf[MMD_SECTOR_LEN];   /* Sector Buffer */

/***************/
/* MMD Device */
/***************/

#define MMD_NAME  "Morrow Micro-Decision"
#define MMD_SNAME "MMD"

/*
** MMD Registers and Interface Controls
*/
typedef struct {
    uint8   phase;                          /* Phase */
    uint8   status;                         /* Main Status Register */
    uint8   motor[MMD_MAX_DRIVES];          /* Motor Status */
    uint8   stat0[MMD_MAX_DRIVES];          /* Status 0 Register */
    uint8   stat1[MMD_MAX_DRIVES];          /* Status 1 Register */
    uint8   stat2[MMD_MAX_DRIVES];          /* Status 2 Register */
    uint8   stat3[MMD_MAX_DRIVES];          /* Status 3 Register */
    uint8   c[MMD_MAX_DRIVES];
    uint8   hd[MMD_MAX_DRIVES];             /* Head Register */
    uint8   h;                              /* Head Register */
    uint8   r;                              /* Sector Register */
    uint8   n;                              /* Number Register */
    uint8   eot;                            /* EOT Register */
    uint8   gpl;                            /* GPL Register */
    uint8   dtl;                            /* DTL Register */
    uint8   sto;                            /* STO Register */
    uint8   pcn;                            /* PCN Register */
    uint8   sc;                             /* SC Register */
    uint8   d;                              /* D Register */
    uint8   cmdflags;                       /* Command Flags */
    uint8   cmd;                            /* Command Register */
    uint8   stack[10];                      /* Stack Buffer */
    uint8   stkidx;                         /* Stack Index */
    uint8   stkcnt;                         /* Stack Count */
    uint32  secidx;                         /* Sector index */
    uint32  seccnt;                         /* Sector count */
    uint8   rxd;                            /* Console rx data register */
    uint8   txd;                            /* Console tx data register */
    uint8   txp;                            /* Console tx data pending */
    uint8   cstatus;                        /* Console status register */
    uint16  baud;                           /* Console baud rate */
    uint8   intenable;                      /* Interrupt enable */
    uint8   intvec;                         /* Interrupt vector */
    uint8   databus;                        /* Mode 2 interrupt data bus */
    uint8   tc;                             /* Terminal Count */
} MMD_REG;

enum { MMD_PHASE_CMDNEW, MMD_PHASE_CMDSTK, MMD_PHASE_EXECRD, MMD_PHASE_EXECWR, MMD_PHASE_RSLTSTK };

typedef struct {
    uint32    rom_base;     /* Memory Base Address */
    uint32    rom_size;     /* Memory Address space requirement */
    uint32    io_base;      /* I/O Base Address */
    uint32    io_size;      /* I/O Address Space requirement */
    int32     conn[2];      /* Connected Status */
    uint8     diagEnabled;  /* DIAG is enabled */
    uint8     romEnabled;   /* ROM is enabled */
    uint32    sio1ticks;    /* SIO Timer ticks */
    uint8     drive;        /* Currently selected drive */
    MMD_REG   MMD;          /* MMD Registers and Data */
    UNIT *uptr[MMD_UNITS];
} MMD_CTX;

static MMD_CTX mmd_ctx_data = {
    MMD_ROM_BASE, MMD_ROM_SIZE, MMD_IO_BASE, MMD_IO_SIZE,
    {0,0}, FALSE, TRUE, 6, 10
};

static MMD_CTX *mmd_ctx = &mmd_ctx_data;

static UNIT mmd_unit[MMD_UNITS] = {
    { UDATA (mmd_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MMD_CAPACITY), 10000 },
    { UDATA (mmd_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MMD_CAPACITY), 10000 },
    { UDATA (mmd_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MMD_CAPACITY), 10000 },
    { UDATA (mmd_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MMD_CAPACITY), 10000 },
    { UDATA (mmd_sio1_svc, UNIT_ATTABLE + UNIT_DISABLE, 0), 10000 },
};

static REG mmd_reg[] = {
    { DRDATAD (DRIVE, mmd_ctx_data.drive, 8, "Current drive register"), },
    { HRDATAD (STATUS, mmd_ctx_data.MMD.status, 8, "Main Status register"), },
    { HRDATAD (CMD, mmd_ctx_data.MMD.cmd, 8, "Command register"), },
    { DRDATAD (SECTOR, mmd_ctx_data.MMD.r, 8, "Sector register"), },
    { DRDATAD (NUMBER, mmd_ctx_data.MMD.n, 8, "Number register"), },
    { DRDATAD (HEAD, mmd_ctx_data.MMD.h, 8, "Head register"), },
    { FLDATAD (ROM, mmd_ctx_data.romEnabled, 0, "ROM enabled bit"), },
    { FLDATAD (DIAG, mmd_ctx_data.diagEnabled, 0, "DIAG enabled bit"), },
    { HRDATAD (BAUD, mmd_ctx_data.MMD.baud, 16, "Console port baud register"), },
    { HRDATAD (TXP, mmd_ctx_data.MMD.txp, 8, "Console port TX Pending register"), },
    { HRDATAD (TXD, mmd_ctx_data.MMD.txd, 8, "Console port TX register"), },
    { HRDATAD (RXD, mmd_ctx_data.MMD.rxd, 8, "Console port RX register"), },
    { FLDATAD (INTENA, mmd_ctx_data.MMD.intenable, 1, "Interrupt enable"), },
    { DRDATAD (INTVEC, mmd_ctx_data.MMD.intvec, 8, "Interrupt vector (0-7)"), },
    { DRDATAD (DATABUS, mmd_ctx_data.MMD.databus, 8, "Mode 2 Interrupt Data Bus"), },
    { NULL }
};

static MTAB mmd_mod[] = {
    { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "DIAG", "DIAG={ENABLE|DISABLE}",
        &mmd_set_diag, &mmd_show_diag, NULL, "Set/Show ROM DIAG enabled/disabled status"},
    { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "ROM", "ROM={25|31}",
        &mmd_set_rom, &mmd_show_rom, NULL, "Set/Show ROM version"},
    { 0 }
};

DEVICE mmd_dev = {
    MMD_SNAME,                            /* name */
    mmd_unit,                             /* unit */
    mmd_reg,                              /* registers */
    mmd_mod,                              /* modifiers */
    MMD_UNITS,                            /* # units */
    10,                                   /* address radix */
    31,                                   /* address width */
    1,                                    /* addr increment */
    8,                                    /* data radix */
    8,                                    /* data width */
    NULL,                                 /* examine routine */
    NULL,                                 /* deposit routine */
    &mmd_reset,                           /* reset routine */
    &mmd_boot,                            /* boot routine */
    &mmd_attach,                          /* attach routine */
    &mmd_detach,                          /* detach routine */
    &mmd_ctx_data,                        /* context */
    (DEV_DISABLE | DEV_DIS | DEV_DEBUG),  /* flags */
    ERROR_MSG,                            /* debug control */
    mmd_dt,                               /* debug flags */
    NULL,                                 /* mem size routine */
    NULL,                                 /* logical name */
    NULL,                                 /* help */
    NULL,                                 /* attach help */
    NULL,                                 /* context for help */
    &mmd_description                      /* description */
};

/********/
/* UART */
/********/

static TMLN mmd_tmln[1] = { /* line descriptors */
    { 0 }
};

static TMXR mmd_tmxr = {    /* multiplexer descriptor */
    1,                      /* number of terminal lines */
    0,                      /* listening port (reserved) */
    0,                      /* master socket  (reserved) */
    mmd_tmln,               /* line descriptor array */
    NULL,                   /* line connection order */
    NULL                    /* multiplexer device (derived internally) */
};

typedef struct {
    PNP_INFO  pnp;          /* Must be first */
    int32     conn;         /* Connected Status */
    uint32    ticks;        /* SIO Timer ticks */
    uint16    baud;         /* Baud rate */
    uint8     rxd;          /* Receive Buffer */
    uint8     txd;          /* Transmit Buffer */
    uint8     txp;          /* Transmit Pending */
    uint8     status;       /* Status Buffer */
    TMLN     *tmln;         /* TMLN pointer */
    TMXR     *tmxr;         /* TMXR pointer */
} MMD_UART_CTX;

#define MMD_STAT_TXRDY   0x01
#define MMD_STAT_RXRDY   0x02

/*********************/
/* MMDM Modem Device */
/*********************/

#define MMDM_NAME  "Morrow Micro Decision Modem Port"
#define MMDM_SNAME "MMDM"

#define MMD_REG_MDATA   0xfe
#define MMD_REG_MSTAT   0xff

#define MMD_BAUD_110    1136
#define MMD_BAUD_300     417
#define MMD_BAUD_600     208
#define MMD_BAUD_1200    104
#define MMD_BAUD_2400     52
#define MMD_BAUD_4800     26
#define MMD_BAUD_9600     13

static TMLN mmdm_tmln[1] = { /* line descriptors */
    { 0 }
};

static TMXR mmdm_tmxr = {    /* multiplexer descriptor */
    1,                       /* number of terminal lines */
    0,                       /* listening port (reserved) */
    0,                       /* master socket  (reserved) */
    mmdm_tmln,               /* line descriptor array */
    NULL,                    /* line connection order */
    NULL                     /* multiplexer device (derived internally) */
};

static MMD_UART_CTX mmdm_ctx_data = {
    {0, 0, MMD_REG_MDATA, 2}, 0, 0, 9600,
    0, 0, 0, 0, mmdm_tmln, &mmdm_tmxr
};

static MMD_UART_CTX *mmdm_ctx = &mmdm_ctx_data;

static REG mmdm_reg[] = {
    { HRDATAD (BAUD, mmdm_ctx_data.baud, 16, "Modem port baud register"), },
    { HRDATAD (STAT, mmdm_ctx_data.status, 8, "Modem port status register"), },
    { HRDATAD (TXP, mmdm_ctx_data.txp, 8, "Modem port TX pending register"), },
    { HRDATAD (TXD, mmdm_ctx_data.txd, 8, "Modem port TX data register"), },
    { HRDATAD (RXD, mmdm_ctx_data.rxd, 8, "Modem port RX register"), },
    { DRDATAD (TICKS, mmdm_ctx_data.ticks, 32, "Modem timer ticks"), },
    { NULL }
};

static UNIT mmdm_unit[] = {
    { UDATA (mmdm_svc, UNIT_ATTABLE + UNIT_DISABLE, 0), 10000 }
};

static MTAB mmdm_mod[] = {
    { 0 }
};

DEVICE mmdm_dev = {
    MMDM_SNAME,                                     /* name */
    mmdm_unit,                                      /* unit */
    mmdm_reg,                                       /* registers */
    mmdm_mod,                                       /* modifiers */
    1,                                              /* # units */
    10,                                             /* address radix */
    31,                                             /* address width */
    1,                                              /* addr increment */
    8,                                              /* data radix */
    8,                                              /* data width */
    NULL,                                           /* examine routine */
    NULL,                                           /* deposit routine */
    &mmdm_reset,                                    /* reset routine */
    NULL,                                           /* boot routine */
    &mmdm_attach,                                   /* attach routine */
    &mmdm_detach,                                   /* detach routine */
    &mmdm_ctx_data,                                 /* context */
    (DEV_DISABLE | DEV_DIS | DEV_DEBUG | DEV_MUX),  /* flags */
    ERROR_MSG,                                      /* debug control */
    mmd_dt,                                         /* debug flags */
    NULL,                                           /* mem size routine */
    NULL,                                           /* logical name */
    NULL,                                           /* help */
    NULL,                                           /* attach help */
    NULL,                                           /* context for help */
    &mmd_description                                /* description */
};

/*************/
/* Functions */
/*************/


static const char* mmd_description(DEVICE *dptr) {
    return MMD_NAME;
}

/* Reset routines */
static t_stat mmd_reset(DEVICE *dptr)
{
    uint8 i;

    if (dptr->flags & DEV_DIS) { /* Disconnect I/O Ports */
        sim_map_resource(mmd_ctx->rom_base, mmd_ctx->rom_size, RESOURCE_TYPE_MEMORY, &mmdrom, "mmdrom", TRUE);
        sim_map_resource(mmd_ctx->io_base, mmd_ctx->io_size, RESOURCE_TYPE_IO, &mmddev, "mmddev", TRUE);
    } else {
        if (sim_map_resource(mmd_ctx->rom_base, mmd_ctx->rom_size, RESOURCE_TYPE_MEMORY, &mmdrom, "mmdrom", FALSE) != 0) {
            sim_debug(ERROR_MSG, &mmd_dev, "Error mapping MEM resource at 0x%04x\n", mmd_ctx->rom_base);
            return SCPE_ARG;
        }
        /* Connect I/O Ports at base address */
        if (sim_map_resource(mmd_ctx->io_base, mmd_ctx->io_size, RESOURCE_TYPE_IO, &mmddev, "mmddev", FALSE) != 0) {
            sim_debug(ERROR_MSG, &mmd_dev, "Error mapping I/O resource at 0x%02x\n", mmd_ctx->io_base);
            return SCPE_ARG;
        }

        /* Start timers for console unit */
        sim_activate_after(mmd_ctx->uptr[MMD_SIO1_UNIT], 500);  /* activate 500 us timer */
    }

    mmd_ctx->drive = 0;

    mmd_ctx->MMD.phase = MMD_PHASE_CMDNEW;
    mmd_ctx->MMD.status = MMD_STAT_RQM;
    mmd_ctx->MMD.r = 1;
    mmd_ctx->MMD.h = 1;
    mmd_ctx->MMD.cmd = 0;
    mmd_ctx->MMD.sto = 1;
    mmd_ctx->MMD.pcn = 2;
    mmd_ctx->MMD.cstatus = MMD_STAT_TXRDY;
    mmd_ctx->MMD.intenable = TRUE;
    mmd_ctx->MMD.intvec = 0;
    mmd_ctx->MMD.databus = 0x7f;
    mmd_ctx->MMD.tc = FALSE;

    for (i=0; i < MMD_UNITS; i++) {
        if (mmd_ctx->uptr[i] == NULL) {
            mmd_ctx->uptr[i] = &mmd_dev.units[i];
        }
    }

    /* Reset Registers */
    for (i=0; i < MMD_MAX_DRIVES; i++) {
        mmd_ctx->MMD.motor[i] |= MMD_STAT_DIAG;
        if (mmd_ctx->diagEnabled) {
            mmd_ctx->MMD.motor[i] &= ~MMD_STAT_DIAG;
        }
        mmd_ctx->MMD.stat0[i] = 0;
        mmd_ctx->MMD.stat1[i] = 0;
        mmd_ctx->MMD.stat2[i] = 0;
        mmd_ctx->MMD.stat3[i] = i;    /* Set US1/US0 */
        mmd_ctx->MMD.c[i] = 0;
        mmd_ctx->MMD.hd[i] = 0;

        /* If drive is attached, set RY flag */
        if (mmd_dev.units[i].flags & UNIT_ATT) {
            mmd_ctx->MMD.stat3[i] |= MMD_STAT3_RY;

            if (mmd_ctx->uptr[i]->capac == MMD_CAPACITY) {
                mmd_ctx->MMD.stat3[i] |= MMD_STAT3_TS;
            }
        }
    }

    sim_debug(STATUS_MSG, &mmd_dev, "reset controller.\n");

    return SCPE_OK;
}

static t_stat mmdm_reset(DEVICE *dptr) {
    MMD_UART_CTX *xptr;

    xptr = (MMD_UART_CTX *) dptr->ctxt;

    dptr->units[0].dptr = dptr;

    if (dptr->flags & DEV_DIS) { /* Disconnect Modem I/O Ports */
        sim_map_resource(xptr->pnp.io_base, xptr->pnp.io_size, RESOURCE_TYPE_IO, &mmddev, "mmdmdev", TRUE);

        mmdm_ctx->status = 0;
    } else {
        /* Connect I/O Ports at base address */
        if (sim_map_resource(xptr->pnp.io_base, xptr->pnp.io_size, RESOURCE_TYPE_IO, &mmddev, "mmdmdev", FALSE) != 0) {
            sim_debug(ERROR_MSG, &mmd_dev, "Error mapping I/O resource at 0x%02x\n", xptr->pnp.io_base);
            return SCPE_ARG;
        }

        mmdm_ctx->status = MMD_STAT_TXRDY;

        /* Start timer */
        sim_activate_after(dptr->units, 500);  /* reactivate 500us timer */
    }

    return SCPE_OK;
}

/* Service routines */
static t_stat mmd_svc(UNIT *uptr)
{
    mmd_ctx->MMD.status &= ~MMD_STAT_BUSY;

    sim_activate_after(uptr, 4000);  /* reactivate 4ms timer */

    return SCPE_OK;
}

static t_stat mmdm_svc(UNIT *uptr)
{
    int32 c;
    t_stat r;

    mmdm_ctx->ticks++;

    /* Check for new incoming connection */
    if (uptr->flags & UNIT_ATT) {
        if (tmxr_poll_conn(&mmdm_tmxr) >= 0) {      /* poll connection */

            mmdm_ctx->conn = 1;          /* set connected   */

            sim_debug(STATUS_MSG, uptr->dptr, "new modem connection.\n");
        }

        /* Modem TX byte pending? */
        if (mmdm_ctx->txp) {
            r = tmxr_putc_ln(&mmdm_tmln[0], mmdm_ctx->txd);

            mmdm_ctx->txp = FALSE;

            if (r == SCPE_LOST) {
                mmdm_ctx->conn = 0;          /* Connection was lost */
                sim_debug(STATUS_MSG, uptr->dptr, "modem lost connection.\n");
            }
        }

        /* Update TX Ready */
        if (!(mmdm_ctx->status & MMD_STAT_TXRDY)) {
            tmxr_poll_tx(&mmdm_tmxr);
            mmdm_ctx->status |= (tmxr_txdone_ln(&mmdm_tmln[0]) && mmdm_ctx->conn) ? MMD_STAT_TXRDY : 0;
        }

        /* Check for Data if modem RX buffer empty */
        if (!(mmdm_ctx->status & MMD_STAT_RXRDY)) {
            tmxr_poll_rx(&mmdm_tmxr);

            c = tmxr_getc_ln(&mmdm_tmln[0]);

            if (c & (TMXR_VALID | SCPE_KFLAG)) {
                mmdm_ctx->rxd = c & 0xff;
                mmdm_ctx->status |= MMD_STAT_RXRDY;
            }
        }

        /* Restart timer */
        sim_activate_after(uptr, 500);  /* reactivate 500 us timer */
    }

    return SCPE_OK;
}

static t_stat mmd_sio1_svc(UNIT *uptr)
{
    int32 c;
    t_stat r;

    mmd_ctx->sio1ticks++;

    /* Check for new incoming connection */
    if (uptr->flags & UNIT_ATT) {
        if (tmxr_poll_conn(&mmd_tmxr) >= 0) {      /* poll connection */

            mmd_ctx->conn[0] = 1;          /* set connected   */

            sim_debug(STATUS_MSG, uptr->dptr, "new connection.\n");
        }
    }

    /* Serial 1 TX byte pending? */
    if (mmd_ctx->MMD.txp) {
        if (uptr->flags & UNIT_ATT) {
            r = tmxr_putc_ln(&mmd_tmln[0], mmd_ctx->MMD.txd);
        } else {
            r = sim_putchar(mmd_ctx->MMD.txd);
        }

        mmd_ctx->MMD.txp = FALSE;

        if (r == SCPE_LOST) {
            mmd_ctx->conn[0] = 0;          /* Connection was lost */
            sim_debug(STATUS_MSG, uptr->dptr, "lost connection.\n");
        }
    }

    /* Update TX Ready */
    if (!(mmd_ctx->MMD.cstatus & MMD_STAT_TXRDY)) {
        if (uptr->flags & UNIT_ATT) {
            tmxr_poll_tx(&mmd_tmxr);
            mmd_ctx->MMD.cstatus |= (tmxr_txdone_ln(&mmd_tmln[0]) && mmd_ctx->conn[0]) ? MMD_STAT_TXRDY : 0;
        } else {
            mmd_ctx->MMD.cstatus |= MMD_STAT_TXRDY;
        }
    }

    /* Check for Data if Serial 1 RX buffer empty */
    if (!(mmd_ctx->MMD.cstatus & MMD_STAT_RXRDY)) {
        if (uptr->flags & UNIT_ATT) {
            tmxr_poll_rx(&mmd_tmxr);

            c = tmxr_getc_ln(&mmd_tmln[0]);
        } else {
            c = sim_poll_kbd();
        }

        if (c & (TMXR_VALID | SCPE_KFLAG)) {
            mmd_ctx->MMD.rxd = c & 0xff;
            mmd_ctx->MMD.cstatus |= MMD_STAT_RXRDY;
        }
    }

    /* Restart timer */
    sim_activate_after(uptr, 500);  /* reactivate 500 us timer */

    return SCPE_OK;
}

/* Attach routines */
static t_stat mmd_attach(UNIT *uptr, CONST char *cptr)
{
    t_stat r;
    unsigned int i = 0;

    /* Attaching to console interface? */
    if (uptr == &mmd_dev.units[MMD_SIO1_UNIT]) {
        if ((r = tmxr_attach(&mmd_tmxr, uptr, cptr)) == SCPE_OK) {
            mmd_tmln[0].rcve = 1;

            sim_debug(VERBOSE_MSG, uptr->dptr, "attached '%s' to console interface.\n", cptr);
        }

        return r;
    }

    r = attach_unit(uptr, cptr);    /* attach unit  */
    if (r != SCPE_OK) {             /* error?       */
        sim_debug(ERROR_MSG, &mmd_dev, "ATTACH error=%d\n", r);
        return r;
    }

    /* Determine length of this disk */
    if (sim_fsize(uptr->fileref) != 0) {
        uptr->capac = sim_fsize(uptr->fileref);
    } else {
        uptr->capac = MMD_CAPACITY;
    }

    for (i = 0; i < MMD_UNITS; i++) {
        if (mmd_dev.units[i].fileref == uptr->fileref) {
            break;
        }
    }

    if (i >= MMD_UNITS) {
        mmd_detach(uptr);

        return SCPE_ARG;
    }

    /* Set Status 3 */
    mmd_ctx->MMD.stat3[i] |= MMD_STAT3_RY;
    if (uptr->flags | UNIT_RO) {
        mmd_ctx->MMD.stat3[i] |= MMD_STAT3_WP;
    }

    if (uptr->capac == MMD_CAPACITY) {
        mmd_ctx->MMD.stat3[i] |= MMD_STAT3_TS;
    }

    /* Default for new file is DSK */
    uptr->u3 = IMAGE_TYPE_DSK;

    sim_debug(VERBOSE_MSG, uptr->dptr, "unit %d, attached to '%s' size=%d\n",
        i, cptr, uptr->capac);

    return SCPE_OK;
}

static t_stat mmdm_attach(UNIT *uptr, CONST char *cptr)
{
    t_stat r;

    if ((r = tmxr_attach(&mmdm_tmxr, uptr, cptr)) == SCPE_OK) {
        mmdm_tmln[0].rcve = 1;

        sim_debug(VERBOSE_MSG, uptr->dptr, "attached '%s' to modem interface.\n", cptr);
    }

    return r;
}

/* Detach routines */
static t_stat mmd_detach(UNIT *uptr)
{
    t_stat r;
    int8 i;

    /* detaching console interface? */
    if (uptr == &mmd_dev.units[MMD_SIO1_UNIT]) {
        if ((r = tmxr_detach(&mmd_tmxr, uptr)) == SCPE_OK) {
            sim_debug(VERBOSE_MSG, uptr->dptr, "detached from console interface.\n");
        }

        return r;
    }

    for (i = 0; i < MMD_UNITS; i++) {
        if (mmd_dev.units[i].fileref == uptr->fileref) {
            break;
        }
    }

    if (i >= MMD_UNITS) {
        return SCPE_ARG;
    }

    mmd_ctx->MMD.stat3[i] &= (MMD_STAT3_US0 | MMD_STAT3_US1);

    DBG_PRINT(("Detach MMD%d\n", i));

    r = detach_unit(uptr);  /* detach unit */

    if (r != SCPE_OK) {
        return r;
    }

    mmdm_dev.units[i].fileref = NULL;

    sim_debug(VERBOSE_MSG, uptr->dptr, "unit %d detached.\n", i);

    return SCPE_OK;
}

static t_stat mmdm_detach(UNIT *uptr)
{
    t_stat r;

    if ((r = tmxr_detach(&mmdm_tmxr, uptr)) == SCPE_OK) {
        sim_debug(VERBOSE_MSG, uptr->dptr, "detached from modem interface.\n");
    }

    return r;
}

static t_stat mmd_config_line(DEVICE *dev, TMLN *tmln, int baud)
{
    char config[20];
    const char *fmt;

    t_stat r = SCPE_IERR;

    if (tmln->serport) {
        fmt = "8N1";

        switch (baud) {
            case MMD_BAUD_110:
                baud = 110;
                break;

            case MMD_BAUD_300:
                baud = 300;
                break;

            case MMD_BAUD_600:
                baud = 600;
                break;

            case MMD_BAUD_1200:
                baud = 1200;
                break;

            case MMD_BAUD_2400:
                baud = 2400;
                break;

            case MMD_BAUD_4800:
                baud = 4800;
                break;

            case MMD_BAUD_9600:
                baud = 9600;
                break;

            default:
                return SCPE_OK;
        }

        sprintf(config, "%d-%s", baud, fmt);

        r = tmxr_set_config_line(tmln, config);

        sim_debug(STATUS_MSG, dev, "port configuration set to '%s'.\n", config);
    }

    return r;
}

static t_stat mmd_boot(int32 unitno, DEVICE *dptr)
{
    sim_debug(VERBOSE_MSG, dptr, "Booting using ROM at 0x%04x\n", mmd_ctx->rom_base);

    /* Enable ROM */
    mmd_ctx->romEnabled = TRUE;

    *((int32 *) sim_PC->loc) = mmd_ctx->rom_base;

    return SCPE_OK;
}

static t_stat mmd_set_diag(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
    int i;

    if (!cptr) return SCPE_IERR;
    if (!strlen(cptr)) return SCPE_ARG;

    /* this assumes that the parameter has already been upcased */
    if (!strncmp(cptr, "ENABLE", strlen(cptr))) {
        mmd_ctx->diagEnabled = TRUE;
    } else if (!strncmp(cptr, "DISABLE", strlen(cptr))) {
        mmd_ctx->diagEnabled = FALSE;
    } else {
        return SCPE_ARG;
    }

    for (i = 0; i < MMD_MAX_DRIVES; i++) {
        mmd_ctx->MMD.motor[i] |= MMD_STAT_DIAG;
        if (!mmd_ctx->diagEnabled) {
            mmd_ctx->MMD.motor[i] &= ~MMD_STAT_DIAG;
        }
    }

    return SCPE_OK;
}

static t_stat mmd_show_diag(FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
    if (mmd_ctx->diagEnabled) {
        fprintf(st, "DIAG");
    } else {
        fprintf(st, "NODIAG");
    }

    return SCPE_OK;
}

static t_stat mmd_set_rom(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
    if (!cptr) return SCPE_IERR;
    if (!strlen(cptr)) return SCPE_ARG;

    /* this assumes that the parameter has already been upcased */
    if (!strncmp(cptr, "13", strlen(cptr))) {
        mmd_rom = mmd_rom_13;
    } else if (!strncmp(cptr, "23", strlen(cptr))) {
        mmd_rom = mmd_rom_23;
    } else if (!strncmp(cptr, "24", strlen(cptr))) {
        mmd_rom = mmd_rom_24;
    } else if (!strncmp(cptr, "25", strlen(cptr))) {
        mmd_rom = mmd_rom_25;
    } else if (!strncmp(cptr, "31", strlen(cptr))) {
        mmd_rom = mmd_rom_31;
    } else {
        return SCPE_ARG;
    }

    return SCPE_OK;
}

static t_stat mmd_show_rom(FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
    if (mmd_rom == mmd_rom_13) {
        fprintf(st, "ROM=v1.3");
    } else if (mmd_rom == mmd_rom_23) {
        fprintf(st, "ROM=v2.3");
    } else if (mmd_rom == mmd_rom_24) {
        fprintf(st, "ROM=v2.4");
    } else if (mmd_rom == mmd_rom_25) {
        fprintf(st, "ROM=v2.5");
    } else if (mmd_rom == mmd_rom_31) {
        fprintf(st, "ROM=v3.1");
    } else {
        fprintf(st, "ROM=v?.?");
    }

    return SCPE_OK;
}

static int32 mmdrom(int32 Addr, int32 rw, int32 Data)
{
    /*
    ** The MD3 ROM occupies 4096 bytes (4K) of RAM at
    ** location 0000H. If the ROM is enabled, return
    ** data in the ROM. If the ROM is disabled,
    ** use RAM.
    */
    if (mmd_ctx->romEnabled == TRUE && !rw) {
        return(mmd_rom[Addr & MMD_ROM_MASK]);
    }

    return mmdmem(Addr, rw, Data);
}

static int32 mmdmem(int32 Addr, int32 rw, int32 Data)
{
    if (rw) {
       mmd_mem[Addr & MMD_ROM_MASK] = Data & 0xff;
    }

    return(mmd_mem[Addr & MMD_ROM_MASK]);
}

static int32 mmddev(int32 Addr, int32 rw, int32 data)
{
    if (rw == 0) {
        return(MMD_Dev_Read(Addr));
    } else {
        return(MMD_Dev_Write(Addr, data));
    }
}

static void intZ80(void)
{
    if (mmd_ctx->MMD.intenable) {
        vectorInterrupt |= (1 << mmd_ctx->MMD.intvec);
        dataBus[mmd_ctx->MMD.intvec] = mmd_ctx->MMD.databus;
    }
}

static uint8 MMD_Dev_Read(uint32 Addr)
{
    uint8 cData = 0xff;

    switch(Addr & 0xff) {
        case MMD_REG_ROMCTL:
            mmd_ctx->romEnabled = FALSE;
            break;

        case MMD_REG_CSTAT:
            cData = mmd_ctx->MMD.cstatus;
            break;

        case MMD_REG_MSTAT:
            cData = mmdm_ctx->status;
            break;

        case MMD_REG_CDATA:
            cData = mmd_ctx->MMD.rxd;
            mmd_ctx->MMD.cstatus &= ~MMD_STAT_RXRDY;   /* Clear RX Ready Flag */
            break;

        case MMD_REG_MDATA:
            cData = mmdm_ctx->rxd;
            mmdm_ctx->status &= ~MMD_STAT_RXRDY;   /* Clear RX Ready Flag */
            break;

        case MMD_REG_FDCSTAT:
            cData = mmd_ctx->MMD.status;
            break;

        case MMD_REG_FDCDATA:
            cData = MMD_FDC_Read_Data();
            break;

        case MMD_REG_MTRCHK:
            /* Toggle index if drive mounted to simulate rotation */
            if (mmd_ctx->MMD.stat3[mmd_ctx->drive] & MMD_STAT3_RY) {
                mmd_ctx->MMD.motor[mmd_ctx->drive] ^= MMD_STAT_IDX;
            }

            cData = mmd_ctx->MMD.motor[mmd_ctx->drive];
            break;

        case MMD_REG_MOTOR:
        case MMD_REG_TC:
            MMD_Term_Count();
            break;

        default:
            sim_debug(ERROR_MSG, &mmd_dev, "READ Invalid I/O Address %02x (%02x)\n",
                Addr & 0xFF, Addr & 0x01);
            break;
    }

    return (cData);
}

static uint8 MMD_FDC_Read_Data(void)
{
    uint8 cData = 0xff;

    switch (mmd_ctx->MMD.phase) {
        case MMD_PHASE_RSLTSTK:
            cData = MMD_Result_Stack();
            break;

        case MMD_PHASE_EXECRD:
            cData = MMD_Exec_Read();
            break;

        default:
            sim_debug(ERROR_MSG, &mmd_dev, "Invalid Phase (%02x)\n", mmd_ctx->MMD.phase);
            break;
    }

    return cData;
}

static uint8 MMD_Dev_Write(uint32 Addr, int32 Data)
{
    switch(Addr & 0xff) {
        case MMD_REG_CTCSEL:
            if (Data==MMD_CH_1) {
                mmd_ctx->MMD.baud = 0;
            }
            else if (Data==MMD_CH_2) {
                mmdm_ctx->baud = 0;
            }
            break;

        case MMD_REG_CH0DIV:
            break;

        case MMD_REG_CH1DIV:
            mmd_ctx->MMD.baud = (mmd_ctx->MMD.baud >> 8) | (Data << 8);
            mmd_config_line(&mmd_dev, &mmd_tmln[0], mmd_ctx->MMD.baud);
            break;

        case MMD_REG_CH2DIV:
            mmdm_ctx->baud = (mmdm_ctx->baud >> 8) | (Data << 8);
            mmd_config_line(&mmdm_dev, &mmdm_tmln[0], mmdm_ctx->baud);
            break;

        case MMD_REG_CENDATA:
            break;

        case MMD_REG_ROMCTL:
            mmd_ctx->romEnabled = TRUE;
            break;

        case MMD_REG_CDATA:
            mmd_ctx->MMD.txd = Data;
            mmd_ctx->MMD.txp = TRUE;    /* Set TX pending flag */
            mmd_ctx->MMD.cstatus &= ~MMD_STAT_TXRDY;
            break;

        case MMD_REG_MDATA:
            mmdm_ctx->txd = Data;
            mmdm_ctx->txp = TRUE;    /* Set TX pending flag */
            mmdm_ctx->status &= ~MMD_STAT_TXRDY;
            break;

        case MMD_REG_VFO:
        case MMD_REG_MOTOR:
            /* Set motor on/off */
            mmd_ctx->MMD.motor[mmd_ctx->drive] &= ~MMD_STAT_MTR;
            mmd_ctx->MMD.motor[mmd_ctx->drive] |= Data;
            break;

        case MMD_REG_FDCDATA:
            MMD_FDC_Write_Data(Data);
            break;

        default:
            sim_debug(ERROR_MSG, &mmd_dev, "WRITE Invalid I/O Address %02x (%02x)\n",
                Addr & 0xFF, Addr & 0x01);
            break;
    }

    return(0xff);
}

static void MMD_FDC_Write_Data(int32 Data)
{
    switch (mmd_ctx->MMD.phase) {
        case MMD_PHASE_CMDNEW:        /* New Command */
            MMD_Command_New(Data);
            break;

        case MMD_PHASE_CMDSTK:
            MMD_Command_Stack(Data);
            break;

        case MMD_PHASE_EXECWR:
            MMD_Exec_Write(Data);
            break;

        default:
            sim_debug(ERROR_MSG, &mmd_dev, "Invalid Phase (%02x)\n", mmd_ctx->MMD.phase);
            break;
    }
}

static void MMD_Command_New(int32 Data)
{
    mmd_ctx->MMD.cmd = Data & MMD_CMD_MASK;
    mmd_ctx->MMD.cmdflags = Data & ~MMD_CMD_MASK;
    mmd_ctx->MMD.stkidx = 0;
    mmd_ctx->MMD.phase = MMD_PHASE_CMDSTK;

    switch (mmd_ctx->MMD.cmd) {
        case MMD_CMD_SIS:
            MMD_Command_Proc();       /* 0 additional bytes */
            break;

        case MMD_CMD_SDS:
        case MMD_CMD_RECALIB:
            mmd_ctx->MMD.stkcnt = 1;  /* 1 additional byte */
            break;

        case MMD_CMD_SEEK:
        case MMD_CMD_SPECIFY:
            mmd_ctx->MMD.stkcnt = 2;  /* 2 additional bytes */
            break;

        case MMD_CMD_FORMAT:
            mmd_ctx->MMD.stkcnt = 5;  /* 5 additional bytes */
            break;

        case MMD_CMD_READ:
        case MMD_CMD_WRITE:
            mmd_ctx->MMD.stkcnt = 8;  /* 8 additional bytes */
            break;

        default:
            MMD_Command_Proc();       /* 0 additional bytes */
            sim_debug(ERROR_MSG, &mmd_dev, "Invalid FDC Command (%02x)\n", mmd_ctx->MMD.cmd);
            break;
    }

    sim_debug(FDC_MSG, &mmd_dev, "cmd=%02X (%s) status=%02X stkcnt=%d stkidx=%d phase=%d\n",
        Data, MMD_Command_String(mmd_ctx->MMD.cmd), mmd_ctx->MMD.status,
        mmd_ctx->MMD.stkcnt, mmd_ctx->MMD.stkidx, mmd_ctx->MMD.phase);
}

static void MMD_Command_Stack(int32 Data)
{
    mmd_ctx->MMD.stack[mmd_ctx->MMD.stkidx++] = Data;

    if (--mmd_ctx->MMD.stkcnt == 0) {
        MMD_Command_Proc();   /* Process Command */
    }
}

static void MMD_Command_Proc(void)
{

    switch (mmd_ctx->MMD.cmd) {
        case MMD_CMD_SPECIFY:
            mmd_ctx->MMD.stat0[mmd_ctx->drive] &= ~MMD_STAT0_ICMASK;
            mmd_ctx->MMD.phase = MMD_PHASE_CMDNEW;
            break;

        case MMD_CMD_RECALIB:
            mmd_ctx->drive = mmd_ctx->MMD.stack[0] & 0x03;
            mmd_ctx->MMD.c[mmd_ctx->drive] = 0;
            mmd_ctx->MMD.pcn = 0;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] = mmd_ctx->MMD.stack[0] & 0x07;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] |= MMD_STAT0_SE;
            mmd_ctx->MMD.stat3[mmd_ctx->drive] |= MMD_STAT3_TO;
            mmd_ctx->MMD.phase = MMD_PHASE_CMDNEW;
            intZ80();   /* Interrupt Z80 */
            break;

        case MMD_CMD_SEEK:
            mmd_ctx->drive = mmd_ctx->MMD.stack[0] & 0x03;
            mmd_ctx->MMD.hd[mmd_ctx->drive] = (mmd_ctx->MMD.stack[0] & 0x04) >> 2;
            mmd_ctx->MMD.c[mmd_ctx->drive] = mmd_ctx->MMD.stack[1];
            mmd_ctx->MMD.pcn = mmd_ctx->MMD.stack[1];
            mmd_ctx->MMD.stat3[mmd_ctx->drive] &= ~MMD_STAT3_TO;
            if (!mmd_ctx->MMD.c[mmd_ctx->drive]) {
                mmd_ctx->MMD.stat3[mmd_ctx->drive] |= MMD_STAT3_TO;
            }
            mmd_ctx->MMD.stat0[mmd_ctx->drive] = mmd_ctx->MMD.stack[0] & 0x07;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] |= MMD_STAT0_SE;
            mmd_ctx->MMD.phase = MMD_PHASE_CMDNEW;
            break;

        case MMD_CMD_SDS:
            mmd_ctx->drive = mmd_ctx->MMD.stack[0] & 0x03;
            mmd_ctx->MMD.hd[mmd_ctx->drive] = (mmd_ctx->MMD.stack[0] & 0x04) >> 2;
            mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.stat3[mmd_ctx->drive];
            mmd_ctx->MMD.stkcnt = 1;
            mmd_ctx->MMD.stkidx = 0;
            mmd_ctx->MMD.status |= MMD_STAT_DIO;
            mmd_ctx->MMD.phase = MMD_PHASE_RSLTSTK;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] = mmd_ctx->MMD.stack[0] & 0x07;
            break;

        case MMD_CMD_SIS:
            mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.sto;
            mmd_ctx->MMD.stack[1] = mmd_ctx->MMD.pcn;
            mmd_ctx->MMD.stkcnt = 2;
            mmd_ctx->MMD.stkidx = 0;
            mmd_ctx->MMD.status |= MMD_STAT_DIO;
            mmd_ctx->MMD.phase = MMD_PHASE_RSLTSTK;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] &= ~MMD_STAT0_ICMASK;
            break;

        case MMD_CMD_FORMAT:
            mmd_ctx->drive = mmd_ctx->MMD.stack[0] & 0x03;
            mmd_ctx->MMD.hd[mmd_ctx->drive] = (mmd_ctx->MMD.stack[0] & 0x04) >> 2;
            mmd_ctx->MMD.n = mmd_ctx->MMD.stack[1];
            mmd_ctx->MMD.sc = mmd_ctx->MMD.stack[2];
            mmd_ctx->MMD.gpl = mmd_ctx->MMD.stack[3];
            mmd_ctx->MMD.d = mmd_ctx->MMD.stack[4];
            MMD_Exec_Format();
            break;

        case MMD_CMD_READ:
        case MMD_CMD_WRITE:
            mmd_ctx->drive = mmd_ctx->MMD.stack[0] & 0x03;
            mmd_ctx->MMD.hd[mmd_ctx->drive] = (mmd_ctx->MMD.stack[0] & 0x04) >> 2;
            mmd_ctx->MMD.c[mmd_ctx->drive] = mmd_ctx->MMD.stack[1];
            mmd_ctx->MMD.h = mmd_ctx->MMD.stack[2];
            mmd_ctx->MMD.r = mmd_ctx->MMD.stack[3];
            mmd_ctx->MMD.n = mmd_ctx->MMD.stack[4];
            mmd_ctx->MMD.eot = mmd_ctx->MMD.stack[5];
            mmd_ctx->MMD.gpl = mmd_ctx->MMD.stack[6];
            mmd_ctx->MMD.dtl = mmd_ctx->MMD.stack[7];
            mmd_ctx->MMD.stat0[mmd_ctx->drive] = mmd_ctx->MMD.stack[0] & 0x07;

            if (mmd_ctx->MMD.cmd == MMD_CMD_READ) {
                mmd_ctx->MMD.stat0[mmd_ctx->drive] |= MMD_Read_Sector(mmd_ctx->drive);
                mmd_ctx->MMD.status |= (MMD_STAT_BUSY | MMD_STAT_EXM | MMD_STAT_DIO);
                mmd_ctx->MMD.phase = MMD_PHASE_EXECRD;
            }
            else {
                mmd_ctx->MMD.seccnt = MMD_SECTOR_LEN;
                mmd_ctx->MMD.secidx = 0;
                mmd_ctx->MMD.status |= (MMD_STAT_BUSY | MMD_STAT_EXM);
                mmd_ctx->MMD.phase = MMD_PHASE_EXECWR;
            }

            if (mmd_ctx->MMD.stat0[mmd_ctx->drive] & MMD_STAT0_AT1) {
                mmd_ctx->MMD.status &= ~MMD_STAT_RQM;   /* Abnormal Termination */
            }
            break;

        default:
            mmd_ctx->MMD.stat0[mmd_ctx->drive] &= ~MMD_STAT0_ICMASK;
            mmd_ctx->MMD.stat0[mmd_ctx->drive] = MMD_STAT0_IC;
            mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.stat0[mmd_ctx->drive];
            mmd_ctx->MMD.stkcnt = 1;
            mmd_ctx->MMD.stkidx = 0;
            mmd_ctx->MMD.status |= MMD_STAT_DIO;
            mmd_ctx->MMD.phase = MMD_PHASE_EXECRD;
            break;
    }
}

static const char * MMD_Command_String(int32 command)
{
    char *string;

    switch (command & MMD_CMD_MASK) {
        case MMD_CMD_SPECIFY:
            string = "SPECIFY";
            break;

        case MMD_CMD_RECALIB:
            string = "RECALIB";
            break;

        case MMD_CMD_SEEK:
            string = "SEEK";
            break;

        case MMD_CMD_FORMAT:
            string = "FORMAT";
            break;

        case MMD_CMD_READ:
            string = "READ";
            break;

        case MMD_CMD_WRITE:
            string = "WRITE";
            break;

        case MMD_CMD_SDS:
            string = "SDS";
            break;

        case MMD_CMD_SIS:
            string = "SIS";
            break;

        default:
            string = "UNRECOGNIZED COMMAND";
            break;
    }

    return string;
}

static uint8 MMD_Result_Stack(void)
{
    uint8 cData;

    cData = mmd_ctx->MMD.stack[mmd_ctx->MMD.stkidx++];

    if (--mmd_ctx->MMD.stkcnt == 0) {
        mmd_ctx->MMD.phase = MMD_PHASE_CMDNEW;   /* Command Done */
        mmd_ctx->MMD.status &= ~(MMD_STAT_DIO | MMD_STAT_BUSY);
    }

    return cData;
}

static uint8 MMD_Exec_Format(void)
{
    uint8 drive = mmd_ctx->drive;

    /* Set filler byte */
    memset(secbuf, mmd_ctx->MMD.d, sizeof(secbuf));

    for (mmd_ctx->MMD.r = 1; mmd_ctx->MMD.r <= mmd_ctx->MMD.sc; mmd_ctx->MMD.r++) {
        mmd_ctx->MMD.status |= MMD_Write_Sector(drive);
    }

    mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.stat0[drive];
    mmd_ctx->MMD.stack[1] = mmd_ctx->MMD.stat1[drive];
    mmd_ctx->MMD.stack[2] = mmd_ctx->MMD.stat2[drive];
    mmd_ctx->MMD.stack[3] = mmd_ctx->MMD.c[drive];
    mmd_ctx->MMD.stack[4] = mmd_ctx->MMD.hd[drive];
    mmd_ctx->MMD.stack[5] = mmd_ctx->MMD.r;
    mmd_ctx->MMD.stack[6] = mmd_ctx->MMD.n;
    mmd_ctx->MMD.stkidx = 0;
    mmd_ctx->MMD.stkcnt = 7;
    mmd_ctx->MMD.status |= MMD_STAT_DIO;
    mmd_ctx->MMD.phase = MMD_PHASE_RSLTSTK;   /* Exec Done */

    intZ80();

    return 0;
}

static uint8 MMD_Exec_Read(void)
{
    uint8 cData;
    uint8 drive = mmd_ctx->drive;

    cData = secbuf[mmd_ctx->MMD.secidx++];

    if (mmd_ctx->MMD.tc || (--mmd_ctx->MMD.seccnt == 0)) {
        if (mmd_ctx->MMD.tc || (mmd_ctx->MMD.r == mmd_ctx->MMD.eot)) {
            mmd_ctx->MMD.status &= ~MMD_STAT_EXM;
            mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.stat0[drive];
            mmd_ctx->MMD.stack[1] = mmd_ctx->MMD.stat1[drive];
            mmd_ctx->MMD.stack[2] = mmd_ctx->MMD.stat2[drive];
            mmd_ctx->MMD.stack[3] = mmd_ctx->MMD.c[drive];
            mmd_ctx->MMD.stack[4] = mmd_ctx->MMD.hd[drive];
            mmd_ctx->MMD.stack[5] = mmd_ctx->MMD.r;
            mmd_ctx->MMD.stack[6] = mmd_ctx->MMD.n;
            mmd_ctx->MMD.stkidx = 0;
            mmd_ctx->MMD.stkcnt = 7;
            mmd_ctx->MMD.phase = MMD_PHASE_RSLTSTK;   /* Exec Done */
            mmd_ctx->MMD.tc = FALSE;
        }
        else {
            mmd_ctx->MMD.r++;
            mmd_ctx->MMD.stat0[drive] |= MMD_Read_Sector(drive);
        }
    }

    intZ80();   /* Interrupt Z80 */

    return cData;
}

static uint8 MMD_Exec_Write(int32 Data)
{
    uint8 drive = mmd_ctx->drive;

    secbuf[mmd_ctx->MMD.secidx++] = Data;

    if (mmd_ctx->MMD.tc || (--mmd_ctx->MMD.seccnt == 0)) {
        mmd_ctx->MMD.stat0[drive] |= MMD_Write_Sector(drive);

        if (mmd_ctx->MMD.tc || (mmd_ctx->MMD.r == mmd_ctx->MMD.eot)) {
            mmd_ctx->MMD.status &= ~MMD_STAT_EXM;
            mmd_ctx->MMD.stack[0] = mmd_ctx->MMD.stat0[drive];
            mmd_ctx->MMD.stack[1] = mmd_ctx->MMD.stat1[drive];
            mmd_ctx->MMD.stack[2] = mmd_ctx->MMD.stat2[drive];
            mmd_ctx->MMD.stack[3] = mmd_ctx->MMD.c[drive];
            mmd_ctx->MMD.stack[4] = mmd_ctx->MMD.hd[drive];
            mmd_ctx->MMD.stack[5] = mmd_ctx->MMD.r;
            mmd_ctx->MMD.stack[6] = mmd_ctx->MMD.n;
            mmd_ctx->MMD.stkidx = 0;
            mmd_ctx->MMD.stkcnt = 7;
            mmd_ctx->MMD.status |= MMD_STAT_DIO;
            mmd_ctx->MMD.phase = MMD_PHASE_RSLTSTK;   /* Exec Done */
            mmd_ctx->MMD.tc = FALSE;
        }
        else {
            mmd_ctx->MMD.r++;
        }
    }

    intZ80();   /* Interrupt Z80 */

    return Data;
}

static uint8 MMD_Term_Count(void)
{
    if (mmd_ctx->MMD.status & MMD_STAT_EXM) {
        mmd_ctx->MMD.tc = TRUE;
    }

    return 0;
}

/* Seek to sector on disk */
static uint8 MMD_Seek_Sector(uint8 drive)
{
    uint32 offset;
    uint8 track;

    /* If no disk mounted, return error */
    if (mmd_ctx->uptr[drive]->fileref == NULL) {
        return MMD_STAT0_AT1 | MMD_STAT0_NR;
    }

    track = mmd_ctx->MMD.c[drive];
    if (mmd_ctx->MMD.stat3[drive] & MMD_STAT3_TS) {   /* 2 Sided? */
        track = mmd_ctx->MMD.c[drive] * 2 + mmd_ctx->MMD.hd[drive];
    }
    offset = track * MMD_BPT + (mmd_ctx->MMD.r - 1) * MMD_SECTOR_LEN;

    if (sim_fseek(mmd_ctx->uptr[drive]->fileref, offset, SEEK_SET) != 0) {
        sim_debug(ERROR_MSG, &mmd_dev, "sim_fseek error.\n");
        return MMD_STAT0_AT1 | MMD_STAT0_EC;
    }

    sim_debug(FDC_MSG, &mmd_dev, "Seek_Sector: drive=%d head=%d track=%d sector=%d offset=%d\n",
        drive, mmd_ctx->MMD.hd[drive], track, mmd_ctx->MMD.r, offset);

    return 0;
}

/* Read sector from disk */
static uint8 MMD_Read_Sector(uint8 drive)
{
    uint8 r;

    if ((r = MMD_Seek_Sector(drive)) != 0) {
        return r;
    }

    if (sim_fread(secbuf, 1, MMD_SECTOR_LEN, mmd_ctx->uptr[drive]->fileref) != MMD_SECTOR_LEN) {
        sim_debug(ERROR_MSG, &mmd_dev, "sim_fread error.\n");
        return MMD_STAT0_AT1 | MMD_STAT0_EC;
    }

    if(mmd_dev.dctrl & RBUF_MSG) {
        MMD_Dump_Sector();
    }

    mmd_ctx->MMD.seccnt = MMD_SECTOR_LEN;
    mmd_ctx->MMD.secidx = 0;

    return 0;
}

/* Write sector to disk */
static uint8 MMD_Write_Sector(uint8 drive)
{
    uint8 r;

    if ((r = MMD_Seek_Sector(drive)) != 0) {
        return r;
    }

    if(mmd_dev.dctrl & WBUF_MSG) {
        MMD_Dump_Sector();
    }

    if (sim_fwrite(secbuf, 1, MMD_SECTOR_LEN, mmd_ctx->uptr[drive]->fileref) != MMD_SECTOR_LEN) {
        sim_debug(ERROR_MSG, &mmd_dev, "sim_fwrite error.\n");
        return MMD_STAT0_AT1 | MMD_STAT0_EC;
    }

    return r;
}

static void MMD_Dump_Sector(void) {
    int32 i;

    for (i = 0; i < 32; i++) {
        sim_printf("%02X ", secbuf[i]);
        if (((i+1) & 0xf) == 0) {
            sim_printf("\n\r");
        }
    }
    sim_printf("\n\r");
}

